Сравнить строку даты с датой и временем в SQL Server?

Вы не указали, почему вам нужно, чтобы он был постоянным, но проблема может возникнуть, если вы используете постоянную папку. Что делать, если папка или файлы в ней используются? Вот почему {tmp} меняется, и Inno Setup обрабатывает его для вас.

Вместо этого вы можете использовать константу {%TEMP} или функцию GetTempDir , в зависимости от того, какая суб- - как вам нравится постоянная. Возможно, вам придется обрабатывать его создание и удаление.

42
задан Rajesh 27 August 2014 в 10:59
поделиться

13 ответов

Техника 1:

 DECLARE @p_date DATETIME
 SET     @p_date = CONVERT( DATETIME, '14 AUG 2008', 106 )

 SELECT  *
 FROM    table1
 WHERE   column_datetime >= @p_date
 AND     column_datetime < DATEADD(d, 1, @p_date)

преимущество этого состоит в том, что это будет использовать любой индекс на 'column_datetime', если это будет существовать.

36
ответ дан Nick DeVore 26 November 2019 в 23:40
поделиться

Я знаю, что это не точно, как Вы хотите сделать это, но это мог быть запуск:

SELECT *
FROM (SELECT *, DATEPART(yy, column_dateTime) as Year, 
      DATEPART(mm, column_dateTime) as Month, 
      DATEPART(dd, column_dateTime) as Day 
      FROM table1)
WHERE Year = '2008'
AND Month = '8'
AND Day = '14'
1
ответ дан Jon Limjap 26 November 2019 в 23:40
поделиться
SELECT  *
FROM    table1
WHERE   CONVERT(varchar(10),columnDatetime,121) = 
        CONVERT(varchar(10),CONVERT('14 AUG 2008' ,smalldatetime),121)

Это преобразует дату и время и строку в varchars формата "YYYY-MM-DD".

Это очень ужасно, но должно работать

1
ответ дан Lars Mæhlum 26 November 2019 в 23:40
поделиться

, Как получить часть ДАТЫ поля DATETIME в SQL Server MS:

Один из самых быстрых и самых опрятных способов сделать это использует

DATEADD(dd, DATEDIFF( dd, 0, @DAY ), 0)

, Он избегает, чтобы слом ЦП "преобразовал дату в строку без времени и затем преобразования его назад снова" логика.

Это также не представляет внутреннюю реализацию, что "часть времени выражается как часть" даты.

Добираются, дата первого дня месяца

DATEADD(dd, DATEDIFF( dd, -1, GetDate() - DAY(GetDate()) ), 0)

Получают дату год rfom 1 назад

DATEADD(m,-12,DATEADD(dd, DATEDIFF( dd, -1, GetDate() - DAY(GetDate()) ), 0))
3
ответ дан Guy 26 November 2019 в 23:40
поделиться

Эта функция Бросок (Пол (Бросок (GetDate () Как Плавание)) Как DateTime) возвраты тип данных datetime с удаленной частью времени и мог использоваться в качестве так.

Select
*
Table1
Where
Cast(Floor(Cast(Column_DateTime As Float)) As DateTime) = '14-AUG-2008'

или

DECLARE  @p_date DATETIME
SET      @p_date = Cast('14 AUG 2008' as DateTime)

SELECT   *
FROM     table1
WHERE    Cast(Floor(Cast(column_datetime As Float)) As DateTime) = @p_date
3
ответ дан GateKiller 26 November 2019 в 23:40
поделиться

Техника 2:

DECLARE @p_date DATETIME
SET     @p_date = CONVERT( DATETIME, '14 AUG 2008', 106 )

SELECT  *
FROM    table1
WHERE   DATEDIFF( d, column_datetime, @p_date ) = 0

, Если column_datetime поле не индексируется и вряд ли будет (или индекс вряд ли будет использоваться) тогда использующий DATEDIFF (), короче.

4
ответ дан Guy 26 November 2019 в 23:40
поделиться

Что-то вроде этого?

SELECT  *
FROM    table1
WHERE   convert(varchar, column_datetime, 111) = '2008/08/14'
4
ответ дан ila 26 November 2019 в 23:40
поделиться

Просто сравните год, месяц и дневные значения.

Declare @DateToSearch DateTime
Set @DateToSearch = '14 AUG 2008'

SELECT * 
FROM table1
WHERE Year(column_datetime) = Year(@DateToSearch)
      AND Month(column_datetime) = Month(@DateToSearch)
      AND Day(column_datetime) = Day(@DateToSearch)
8
ответ дан Yaakov Ellis 26 November 2019 в 23:40
поделиться

В SQL Server 2008 Вы могли использовать новый тип данных ДАТЫ

DECLARE @pDate DATE='2008-08-14'  

SELECT colA, colB
FROM table1
WHERE convert(date, colDateTime) = @pDate  

@Guy. Я думаю, что Вы найдете, что это решение масштабируется очень хорошо. Взгляните на план выполнения запросов Вашего исходного запроса.

И для мой :

17
ответ дан vzczc 26 November 2019 в 23:40
поделиться

Хорошее замечание по поводу индекса в принятом вами ответе.

Тем не менее, если вы действительно выполняете поиск только в определенных диапазонах DATE или DATE часто , то лучшим решением, которое я нашел, является добавление еще одного постоянного вычисляемого столбца в вашу таблицу, будет содержать только DATE и добавить индекс в этот столбец:

ALTER TABLE "table1" 
    ADD "column_date" AS CONVERT(DATE, "column_datetime") PERSISTED

Добавить индекс в этот столбец:

CREATE NONCLUSTERED INDEX "table1_column_date_nu_nci"
ON  "table1" ( "column_date" ASC )
GO

Тогда ваш поиск будет еще быстрее:

DECLARE  @p_date DATE
SET      @p_date = CONVERT( DATE, '14 AUG 2008', 106 )

SELECT   *
FROM     table1
WHERE    column_date = @p_date
4
ответ дан 26 November 2019 в 23:40
поделиться
DECLARE @Dat

SELECT * 
FROM Jai
WHERE                                                                                                          
CONVERT(VARCHAR(2),DATEPART("dd",Date)) +'/'+                                                              
             CONVERT(VARCHAR(2),DATEPART("mm",Date)) +'/'+              
                     CONVERT(VARCHAR(4), DATEPART("yy",Date)) = @Dat
1
ответ дан 26 November 2019 в 23:40
поделиться
SELECT CONVERT(VARCHAR(2),DATEPART("dd",doj)) + 
    '/' + CONVERT(VARCHAR(2),DATEPART("mm",doj)) + 
    '/' + CONVERT(VARCHAR(4),DATEPART("yy",doj)) FROM emp
0
ответ дан 26 November 2019 в 23:40
поделиться

В sqlserver

DECLARE @p_date DATE

SELECT * 
FROM table1
WHERE column_dateTime=@p_date

В C # Передайте короткую строку значения даты с помощью функции ToShortDateString (). Пример: DateVariable.ToShortDateString ();

-1
ответ дан 26 November 2019 в 23:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: