เมื่อฉันเลือกวันใน SQL 2011-02-25 21:17:33.933
มันจะกลับมาเป็น 2011-02-25
แต่ผมจำเป็นต้องใช้เพียงส่วนหนึ่งวันนั่นคือ ฉันจะทำสิ่งนี้ได้อย่างไร
เมื่อฉันเลือกวันใน SQL 2011-02-25 21:17:33.933
มันจะกลับมาเป็น 2011-02-25
แต่ผมจำเป็นต้องใช้เพียงส่วนหนึ่งวันนั่นคือ ฉันจะทำสิ่งนี้ได้อย่างไร
คำตอบ:
ฉันเดาว่าเขาต้องการสตริง
select convert(varchar(10), '2011-02-25 21:17:33.933', 120)
120 นี่บอกแปลงฟังก์ชั่นที่เราผ่านวันที่ป้อนข้อมูลในรูปแบบดังต่อไปนี้yyyy-mm-dd hh:mi:ss
:
สำหรับ SQL Server 2008:
Convert(date, getdate())
โปรดดูที่https://docs.microsoft.com/en-us/sql/t-sql/functions/getdate-transact-sql
DATE
มีอะไรใหม่ในปี 2008
date
ชนิดข้อมูลดังนั้นการแสดงผลโซลูชันนี้จึงไม่ถูกต้อง
เร็วที่สุดคือdatediff
เช่น
select dateadd(d, datediff(d,0, [datecolumn]), 0), other..
from tbl
แต่ถ้าคุณต้องการใช้ค่าเพียงอย่างเดียวคุณสามารถข้าม Dateadd เช่น
select ...
WHERE somedate <= datediff(d, 0, getdate())
โดยที่นิพจน์datediff(d, 0, getdate())
นั้นเพียงพอที่จะส่งคืนวันที่วันนี้โดยไม่มีเวลา
ใช้ CAST (GETDATE () เป็นวันที่) ที่ใช้งานได้ง่ายสำหรับฉัน
CAST(order_date AS DATE)
CAST(
FLOOR(
CAST( GETDATE() AS FLOAT )
)
AS DATETIME
)
http://www.bennadel.com/blog/122-Getting-Only-the-Date-Part-of-a-Date-Time-Stamp-in-SQL-Server.htm
คุณสามารถใช้แบบนี้
SELECT Convert(varchar(10), GETDATE(),120)
สำหรับเวอร์ชั่นเก่าปี 2008 :
SELECT DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 0)
มันช้าไปหน่อย แต่ใช้ฟังก์ชั่น "curdate" ของ ODBC (angle brackes 'fn' เป็นลำดับหนีฟังก์ชัน ODBC)
SELECT {fn curdate()}
เอาท์พุท: 2013-02-01
SELECT {fn curdate()} FROM (SELECT 1) AS T(X)
และมีลักษณะที่แผนการดำเนินการที่เกิดขึ้นจริง (รุ่น XML) CONVERT(varchar(10),getdate(),23)
คุณจะเห็นคือสิ่งที่จะดำเนินการจริง ดังนั้นประเภทข้อมูลของ ODBC ฟังก์ชันนี้varchar(10)
ซึ่งหมายความว่าถ้าคุณต้องการเปรียบเทียบผลกับdatetime
คุณจะได้รับการแปลงโดยปริยายจากvarchar(10)
ไปในสตริงdatetime
ว่าการแปลงนัยจะล้มเหลวด้วยyyyy-mm-dd
set dateformat dmy
คุณสามารถลองอันนี้ได้เช่นกัน
SELECT CONVERT(DATE, GETDATE(), 120)
แปลงกลับเป็นวันที่และเวลาหลังจากแปลงเป็นวันที่เพื่อเก็บ datatime เดิมหากจำเป็น
select Convert(datetime, Convert(date, getdate()) )
ในกรณีที่คุณต้องการเวลาเป็นศูนย์เช่น2018-01-17 00:00:00.000
:
SELECT CONVERT(DATETIME, CONVERT(DATE, GETDATE()), 121)
ใช้ง่าย:
convert(date, Btch_Time)
ตัวอย่างด้านล่าง:
ตาราง:
Efft_d Loan_I Loan_Purp_Type_C Orig_LTV Curr_LTV Schd_LTV Un_drwn_Bal_a Btch_Time Strm_I Btch_Ins_I
2014-05-31 200312500 HL03 NULL 1.0000 1.0000 1.0000 2014-06-17 11:10:57.330 1005 24851e0a-53983699-14b4-69109
Select * from helios.dbo.CBA_SRD_Loan where Loan_I in ('200312500') and convert(date, Btch_Time) = '2014-06-17'
มันสายเกินไป แต่การติดตามฉันก็ทำได้ดี
declare @vCurrentDate date=getutcdate()
select @vCurrentDate
เมื่อชนิดข้อมูลเป็นวันที่ชั่วโมงจะถูกตัดทอน
ใน PLSQL คุณสามารถใช้
to_char(SYSDATE,'dd/mm/yyyy')
ก่อนอื่นแปลงวันที่จะลอย (ซึ่งแสดงตัวเลข) จากนั้นROUND
ตัวเลขเป็น 0 จุดทศนิยมแล้วแปลงเป็นวันที่และเวลา
convert(datetime,round(convert(float,orderdate,101),0) ,101)
หากคุณต้องการคืนประเภทวันที่เช่นเดียวกับการใช้วันที่
CONVERT(date, SYSDATETIME())
หรือ
SELECT CONVERT(date,SYSDATETIME())
หรือ
DECLARE @DateOnly Datetime
SET @DateOnly=CONVERT(date,SYSDATETIME())
ลองสิ่งนี้
SELECT DATEADD(DD, 0, DATEDIFF(DD, 0, GETDATE()))