Получение даты из поля DateTime в SQL Server - PullRequest
4 голосов
/ 13 апреля 2010

У меня есть столбец даты, в котором дата отображается в формате 2009-11-18 10:55:28.370.

Я просто хочу получить дату (а не время) из этого значения. Как мне это сделать?

Ответы [ 6 ]

8 голосов
/ 13 апреля 2010

Если вы используете SQL Server 2008, теперь существует тип данных DATE. Делает это намного более естественным!

SELECT CONVERT(Date, GETDATE())
3 голосов
/ 13 апреля 2010

это называется «создание даты и времени», сделайте так, чтобы удалить только время (это самый быстрый метод, более быстрый, чем использование форматирования STING CONVERT () или CAST ()):

DECLARE @datetime datetime;
SET @datetime = '2008-09-17 12:56:53.430';
SELECT DATEADD(day,DATEDIFF(day,0,@datetime),0)

ВЫВОД:

-----------------------
2008-09-17 00:00:00.000

(1 row(s) affected)

вот как это сделать для других частей даты и времени:

--Floor a datetime
DECLARE @datetime datetime;
SET @datetime = '2008-09-17 12:56:53.430';

SELECT '0 None',  @datetime                                                                   -- none    2008-09-17 12:56:53.430
UNION SELECT '1 Second',DATEADD(second,DATEDIFF(second,'2000-01-01',@datetime),'2000-01-01')  -- Second: 2008-09-17 12:56:53.000
UNION SELECT '2 Minute',DATEADD(minute,DATEDIFF(minute,0,@datetime),0)                        -- Minute: 2008-09-17 12:56:00.000
UNION SELECT '3 Hour',  DATEADD(hour,DATEDIFF(hour,0,@datetime),0)                            -- Hour:   2008-09-17 12:00:00.000
UNION SELECT '4 Day',   DATEADD(day,DATEDIFF(day,0,@datetime),0)                              -- Day:    2008-09-17 00:00:00.000
UNION SELECT '5 Month', DATEADD(month,DATEDIFF(month,0,@datetime),0)                          -- Month:  2008-09-01 00:00:00.000
UNION SELECT '6 Year',  DATEADD(year,DATEDIFF(year,0,@datetime),0)                            -- Year:   2008-01-01 00:00:00.000
ORDER BY 1
PRINT' '
PRINT 'Note that when you are flooring by the second, you will often get an arithmetic overflow if you use 0. So pick a known value that is guaranteed to be lower than the datetime you are attempting to floor'
PRINT 'this always uses a date less than the given date, so there will be no arithmetic overflow'
SELECT '1 Second',DATEADD(second,DATEDIFF(second,DATEADD(day,DATEDIFF(day,0,@datetime),0)-1,@datetime),DATEADD(day,DATEDIFF(day,0,@datetime),0)-1)  -- Second: 2008-09-17 12:56:53.000

ВЫВОД:

-------- -----------------------
0 None   2008-09-17 12:56:53.430
1 Second 2008-09-17 12:56:53.000
2 Minute 2008-09-17 12:56:00.000
3 Hour   2008-09-17 12:00:00.000
4 Day    2008-09-17 00:00:00.000
5 Month  2008-09-01 00:00:00.000
6 Year   2008-01-01 00:00:00.000

(7 row(s) affected)


Note that when you are flooring by the second, you will often get an arithmetic overflow if you use 0. So pick a known value that is guaranteed to be lower than the datetime you are attempting to floor
this always uses a date less than the given date, so there will be no arithmetic overflow

-------- -----------------------
1 Second 2008-09-17 12:56:53.000

(1 row(s) affected)
1 голос
/ 13 апреля 2010

Если я правильно понял ваш вопрос,

select convert(varchar, creation_date , 103) as creation_date from tablename

Посмотрите на CAST и CONVERT

0 голосов
/ 13 апреля 2010

Вы всегда можете использовать функции месяца / дня / года, чтобы вернуть его:

declare @date datetime
set @date = '1/1/10 12:00 PM'
select cast(month(@date) as varchar) + '/' + cast(day(@date) as varchar) + '/' + cast(year(@date) as varchar) as theDate
0 голосов
/ 13 апреля 2010

Вам просто нужно включить creation_date в предложение select следующим образом:

select id, creation_date from risks where creation_date = getdate() 
0 голосов
/ 13 апреля 2010

Здесь:

SELECT creation_date 
FROM risks
WHERE creation_date = GETDATE()

Это вернет все значения creation_date, хранящиеся в таблице risks, которые в точности соответствуют значениям, возвращаемым функцией GETDATE(). Я предполагаю, что тип данных creation_date равен Date.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...