Як вибрати дату без часу в SQL


257

Коли я вибираю дату в SQL, вона повертається як 2011-02-25 21:17:33.933. Але мені потрібна лише дата, тобто 2011-02-25. Як я можу це зробити?


4
Я здогадуюсь, що він хоче рядок, і тому він не дублюється
— bernd_k


@TylerH чи є спосіб отримати 2011-02-25 00: 00: 00.000 замість поточного часу?
— Thrainder

Відповіді:


148

Я думаю, він хоче струну.

select convert(varchar(10), '2011-02-25 21:17:33.933', 120)

120 тут говорить функцію перетворення , що ми перейдемо дату введення в наступному форматі : yyyy-mm-dd hh:mi:ss.


Що таке 120?
— Павле

@ Павле зверніться до цієї статті Стилі дати та часу
— Fox Vĩnh Tâm

Я використав цей вибір конвертувати (varchar (10), APPROVED_DATE, 120), я отримав колонку помилок APPROVED_DATE datetime, як я перетворять його? Помилка Ідентифікатор багаточастин "LAB_RESULTS.APPROVED_DATE" не вдалося зв'язати.
— Абдулла

530

Для SQL Server 2008:

Convert(date, getdate())  

Зверніться до https://docs.microsoft.com/en-us/sql/t-sql/functions/getdate-transact-sql


6
Я отримую "Дата введення не визначений тип системи."
— SeaDrive

10
DATEновий у 2008 р.
— Тім Шмелтер

33
я не маю уявлення, чому це така відповідна відповідь. це питання стосується SQL Server 2005, НЕ 2008. 2005 року не має dateтипу даних, тому це рішення робить недійсним.
— Джошуа Бернс

84
Це рекомендується, тому що люди приходять шукати рішення своєї проблеми, а не автори. Тож якщо 110 людей знайшли, що це працювало для них, я думаю, що це справедливо, що він має 110 результатів.
— Джеймс

У мене така ж помилка, коли я використовую select convert (table.order_date, getdate ()); версія сервера sql 2017, помилка (дата введення не визначений тип системи) дата стовпця типу стовпця
— Абдулла,

57

Найшвидший - datediffнапр

select dateadd(d, datediff(d,0, [datecolumn]), 0), other..
from tbl

Але якщо вам потрібно використовувати лише значення, ви можете пропустити додане дату, наприклад

select ...
WHERE somedate <= datediff(d, 0, getdate())

де виразу datediff(d, 0, getdate())достатньо, щоб повернути сьогоднішню дату без часової частини.


Олді, але добрий, використовував цю хитрість десятки разів у старих БД 2000/2005.
— KeithS



12

ви можете використовувати так

SELECT Convert(varchar(10), GETDATE(),120) 

куди я покладу дату замовлення назви своєї колонки?
— Абдулла

10

Для старшої версії 2008 року :

SELECT DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 0)


оплески за це! Інші рішення покладаються лише на частину varchar (10), яка просто скорочує значення.
— Gonza Oviedo

2

Це трохи пізно, але використовуйте функцію ODBC "curdate" (кутові дужки "fn" - це послідовність відхилення функції ODBC).

SELECT {fn curdate()} 

Вихід: 2013-02-01


4
Мені чесно цікаво, як ви вважаєте, що ваша відповідь краща за прийняту відповідь. Або де ви, мабуть, посилаєтесь на інші відповіді?
— Мікаель Ерікссон

1
@Mikael Eriksson: Хм, оскільки ODBC-функції - це канонічні функції, і тому вони піддаються індексації, на відміну від недетермінованих функцій SQL-сервера. Але не забувайте, це лише масштабне питання, коли ви переходите від своїх 3-х записів тестування до 1 * 10E6 записів у виробництві, у вас не виникає проблем під час розробки;)
— Стефан Штайгер

8
Якщо запустити цей запит 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.
— Мікаель Ерікссон

1
@Mikael Eriksson: Схоже на помилку, їм слід використовувати SELECT CONVERT (char (8), GETDATE (), 112).
— Стефан Штайгер

"канонічні функції і тому індексуються, на відміну від недетермінованих функцій SQL-сервера" - е, що?
— Мартін Сміт


2

Перетворити його назад у дату після перетворення на дату, щоб зберегти той самий час даних, якщо потрібно

select Convert(datetime, Convert(date, getdate())  )


1

Використання просте:

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'

1

Це занадто пізно, але наступні працювали для мене добре

declare @vCurrentDate date=getutcdate()

select @vCurrentDate

Коли тип даних - дата, години будуть усічені


0

У PLSQL ви можете використовувати

to_char(SYSDATE,'dd/mm/yyyy')

розглянути можливість передачі цього коментаря.
— xlembouras

Це питання стосується SQL Server ... а не Oracle
— Бен

0

Спочатку перетворіть дату в плаваючу (яка відображає числову), потім ROUNDчислову в 0 десяткових знаків, а потім перетворіть її в дату.

convert(datetime,round(convert(float,orderdate,101),0) ,101)

0

Якщо ви хочете повернути тип дати як просто використання дати

CONVERT(date, SYSDATETIME())

або

SELECT CONVERT(date,SYSDATETIME()) 

або

DECLARE @DateOnly Datetime
SET @DateOnly=CONVERT(date,SYSDATETIME())

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.