วิธีรับรูปแบบเวลาจาก DateTime ใน SQL


182

ฉันต้องการรับเฉพาะเวลาจากคอลัมน์ DateTime โดยใช้แบบสอบถาม SQL โดยใช้ SQL Server 2005 และ 2008 ผลลัพธ์เริ่มต้น:

AttDate                   
==
2011-02-09 13:09:00    
2011-02-09 14:10:00    

ฉันต้องการผลลัพธ์นี้:

AttDate                Time 
==
2011-02-09 13:09:00    13:09
2011-02-09 14:10:00    14:10

ค้นหาวิธี to_char ใน sql คุณสามารถระบุรูปแบบและรับผลลัพธ์ที่ต้องการ
Naveen Babu

1
เลือกการแปลง (varchar (10), getdate (), 108)
rahularyansharma

อาจเป็นSELECT CONVERT(VARCHAR(8),GETDATE(),108)เซิร์ฟเวอร์ sql
V4Vendetta

คำตอบ:



34

สมมติว่าเซิร์ฟเวอร์ SQL

SELECT CONVERT(VARCHAR(8),GETDATE(),108)


ใช้งานได้เฉพาะกับ getdate () โดยที่เมื่อฉันผ่าน select convert (varchar (8), '2011-02-09 13: 09: 00', 108) มันผลิตอักขระ 8 ตัวแรกจากวันที่ ?
Aparna

24

SQL Server 2008+ มีประเภทข้อมูล "เวลา"

SELECT 
    ..., CAST(MyDateTimeCol AS time)
FROM
   ...

สำหรับรุ่นที่เก่ากว่าโดยไม่มีการแปลง varchar

SELECT 
    ..., DATEADD(dd, DATEDIFF(dd, MyDateTimeCol, 0), MyDateTimeCol)
FROM
   ...

ทำไมคุณไม่ใช้ SELECT CONVERT (VARCHAR (8), GETDATE (), 108) AS HourMinuteSecond, CONVERT (VARCHAR (8), GETDATE (), 101) ตามวันที่มีปัญหาด้านประสิทธิภาพเท่านั้น?
rahularyansharma

2
@rahularyansharma: ฉันไม่ได้ใช้การแปลง varchar สำหรับวันที่หากต้องการ
gbn

คุณต้องการทราบหรือไม่ว่ามีประสิทธิภาพลดลงหากเราใช้สิ่งนี้แทนวิธีการแก้ปัญหาของคุณ?
rahularyansharma

1
@rahularyansharma: คุณสามารถทดสอบตัวเองโดยอ้างอิงจากstackoverflow.com/questions/133081/
gbn

1
สำหรับทุกคนที่ไม่ได้ดังต่อไปนี้แสดงถึงวันที่นาที0 1900-01-01ดังนั้นนี่จะได้รับจำนวน (ลบ) จำนวนวันระหว่างค่าคอลัมน์และ 0 จากนั้นเพิ่มวันลบเหล่านั้นให้กับค่าคอลัมน์ที่ "ตัดค่าศูนย์" ส่วนวันที่ออก1900-01-01และคุณจะเหลือเวลาเพียง
xr280xr

13

วิธีที่ง่ายที่สุดในการรับเวลาจากวันที่และเวลาโดยไม่มีสแต็คเป็นมิลลิวินาทีคือ:

SELECT convert(time(0),getDate())

10

ลองใช้สิ่งนี้

  • วันที่เวลา

    select cast(getdate() as time(0))
  • เวลาที่จะ TinyTime

    select cast(orig_time as time(0))





3

ฉันมักจะใช้สคริปต์นี้เพื่อรับเวลาจาก DateTime:

SELECT CONVERT(VARCHAR(9),RIGHT(YOURCOLUMN_DATETIME,9),108) FROM YOURTABLE

ทำไมฉันถึงได้รับ 9 ต่อหน้า .. ผล
Sayed Muhammad Idrees


2

หากคุณต้องการออกเดทในรูปแบบนี้: 23 ต.ค. 2556 10:30 น

ใช้สิ่งนี้

SELECT CONVERT(NVARCHAR(30),getdate(), 100)

convert() วิธีการใช้เวลา 3 พารามิเตอร์

  1. ประเภทข้อมูล
  2. คอลัมน์ / มูลค่า
  3. สไตล์: สไตล์ที่มีอยู่มีตั้งแต่ 100 ถึง 114 คุณสามารถเลือกได้จากภายใน เลือกหนึ่งต่อหนึ่งเพื่อเปลี่ยนรูปแบบวันที่

2

รับวันที่ของเซิร์ฟเวอร์

SELECT LTRIM(RIGHT(CONVERT(VARCHAR(20), GETDATE(), 100), 7)) FROM TABLENAME WHERE ...

หรือ

หากเก็บไว้ในตาราง

SELECT LTRIM(RIGHT(CONVERT(VARCHAR(20), datename, 100), 7)) FROM TABLENAME WHERE ...

ผลลัพธ์:

11:41



1

บน MSSQL2012 ขึ้นไป

cast(dateadd(ms,datediff(ms, [StartDateTime], [StopDateTime]),0) as Time(0))

...หรือ...

convert(time(0),dateadd(ms,datediff(ms, [StartDateTime], [StopDateTime]),0) )

1

SQL Server 2012:

Select TRY_CONVERT(TIME, myDateTimeColumn) from myTable;

โดยส่วนตัวแล้วฉันชอบ TRY_CONVERT () ถึง CONVERT () ข้อแตกต่างหลัก: หากการส่งล้มเหลว TRY_CONVERT () จะส่งกลับค่า NULL ขณะ CONVERT () ทำให้เกิดข้อผิดพลาด


-1

select substr(to_char(colUmn_name, 'DD/MM/RRRR HH:MM:SS'),11,19) from table_name;

ผลลัพธ์: จาก

05:11:26
05:11:24
05:11:24

ไม่ทำงานให้ข้อผิดพลาด'to_char' is not a recognized built-in function name.
captainsac
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.