Як вибрати дату без часу в 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.