Как выбрать дату без времени в SQL

257

Когда я выбираю дату в SQL, она возвращается как 2011-02-25 21:17:33.933. Но мне нужна только часть даты, то есть 2011-02-25. Как я могу это сделать?

Neeraj
источник
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.

bernd_k
источник
Для чего 120?
Павле
@ Павле см. Эту статью Стили даты и времени
Fox Vĩnh Tâm
я использовал этот select convert (varchar (10), APPROVED_DATE, 120), я получил столбец с ошибкой APPROVED_DATE datetime, как я буду конвертировать его? Ошибка Не удалось связать многоэлементный идентификатор «LAB_RESULTS.APPROVED_DATE».
Абдулла
531

Для SQL Server 2008:

Convert(date, getdate())  

Пожалуйста, обратитесь к https://docs.microsoft.com/en-us/sql/t-sql/functions/getdate-transact-sql

Prad9
источник
6
Я получаю «Тип даты не является определенным типом системы».
SeaDrive
10
DATEновый в 2008 году.
Тим Шмельтер
33
Я понятия не имею, почему это такой голос против. этот вопрос относится к SQL Server 2005, а не к 2008 году. 2005 не имеет dateтипа данных, поэтому это решение считается недействительным.
Джошуа Бернс
84
За это проголосовали, потому что люди ищут решения своей проблемы, а не авторов. Так что, если 110 человек нашли, что это сработало для них, я думаю, это справедливо, что у них 110 голосов.
Джеймс
У меня та же ошибка, когда я использую select convert (table.order_date, getdate ()); SQL Server версии 2017, ошибка (тип даты не является определенным типом системы) тип столбца datetime
Абдулла
57

Самый быстрый datediff, например,

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

Но если вам нужно использовать только значение, вы можете пропустить дату, например,

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

где выражения datediff(d, 0, getdate())достаточно, чтобы вернуть сегодняшнюю дату без временной части.

RichardTheKiwi
источник
Олди, но хорошо, использовал этот трюк десятки раз в более старых БД 2000/2005.
KeithS
43

Использовать CAST (GETDATE () в качестве даты), который работал для меня, просто.

Anna-Leny
источник
где я добавлю имя моего столбца? выбрать приведение (getdate () в качестве даты, order_date)?
Абдулла
@AbdullahCAST(order_date AS DATE)
Эндрю Мортон
12

вы можете использовать как это

SELECT Convert(varchar(10), GETDATE(),120) 
A.Goutam
источник
куда я положу дату заказа имени моего столбца?
Абдулла
10

Для более старой версии 2008 :

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

Domcha
источник
аплодисменты за это! Другие решения опираются только на часть varchar (10), которая просто усекает значение.
Гонза Овьедо
2

Немного поздно, но используйте функцию ODBC "curdate" (угловые скобки 'fn' - escape-последовательность функции ODBC).

SELECT {fn curdate()} 

Вывод: 2013-02-01

Стефан Штайгер
источник
4
Мне честно любопытно, как вы думаете, ваш ответ лучше, чем принятый ответ. Или где вы, возможно, ссылаетесь на другие ответы?
Микаэль Эрикссон
1
@Mikael Eriksson: Хм, потому что ODBC-функции являются каноническими функциями и поэтому индексируются, в отличие от недетерминированных функций SQL-сервера. Но не берите в голову, это проблема масштабирования, когда вы переходите от 3-х записей в тестировании к 1 * 10E6 в производстве, у вас не возникает проблем во время разработки;)
Stefan Steiger
8
Если вы запустите этот запрос SELECT {fn curdate()} FROM (SELECT 1) AS T(X)и посмотрите на фактический план выполнения (версия xml), вы увидите, что на самом деле выполняется CONVERT(varchar(10),getdate(),23). Таким образом, тип данных этой функции ODBC varchar(10)означает, что если вы хотите сравнить результат с a, datetimeвы получите неявное преобразование из varchar(10)в datetimeстроку yyyy-mm-dd. Это неявное преобразование не удастся set dateformat dmy.
Микаэль Эрикссон
1
@Mikael Eriksson: похоже на ошибку, они должны использовать вместо этого SELECT CONVERT (char (8), GETDATE (), 112).
Стефан Штайгер
«Канонические функции и, следовательно, индексируемые, в отличие от недетерминированных функций SQL-сервера» - ну что?
Мартин Смит,
2

Вы можете попробовать это тоже.

SELECT CONVERT(DATE, GETDATE(), 120)
Рам Пратап
источник
2

Преобразуйте его обратно в datetime после преобразования в date, чтобы сохранить то же время данных, если это необходимо

select Convert(datetime, Convert(date, getdate())  )
RollRoll
источник
2

В случае, если вам нужно время, чтобы нули, как 2018-01-17 00:00:00.000:

SELECT CONVERT(DATETIME, CONVERT(DATE, GETDATE()), 121)

Саймон Альфонс
источник
Спасибо, это то, что я искал.
Пратик Гаг
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')
Morterox
источник
рассмотреть возможность передачи этого в комментарий.
xlembouras
Этот вопрос касается SQL Server ... не Oracle
Бен
0

Сначала преобразуйте дату в число с плавающей точкой (отображающее числовое значение), затем ROUNDчисловое значение в 0 десятичных знаков, а затем преобразуйте его в дату и время.

convert(datetime,round(convert(float,orderdate,101),0) ,101)
user4162468
источник
0

Если вы хотите вернуть тип даты, просто используйте дату

CONVERT(date, SYSDATETIME())

или

SELECT CONVERT(date,SYSDATETIME()) 

или

DECLARE @DateOnly Datetime
SET @DateOnly=CONVERT(date,SYSDATETIME())
ТМП ByKIS
источник
0

Попробуй это.

SELECT DATEADD(DD, 0, DATEDIFF(DD, 0, GETDATE()))
Рам Пратап
источник