2013-11-25 3 views
0

Многое в сети об этом, но я просто не могу заставить что-нибудь работать правильно.SQL - преобразование даты и времени + Параметры

Мне нужно найти все от конкретной таблицы где дата моего параметра, найденная в «timestamp'datetime на этом столе

Так позволяет сказать.

Select g.* 
From egtable..headerinfo as g 
WHERE g.istatus BETWEEN 5 AND 10 AND 
REPLACE(LEFT(CONVERT (varchar, timestamp, 101),10),' ','-') = convert(datetime,'<%parameterDate%>') 

Отметка времени отображает «гггг-мм-дд чч: мм: сс» моя дата параметра будет «быть мм/дд/гггг»

Моя цель состоит в том, чтобы в конечном счете, раздеть время, конвертировать дату, а затем сравнивать с параметрами. Любая помощь по этому поводу была бы весьма признательна. Я пробовал бесчисленные комбинации и ничего, кажется, работает :(

Благодаря B

+0

Там нет необходимости конвертировать как его лучше преобразовать входящие данные (параметр) в формат SQL , а не наоборот, поскольку используемые индексы и поиск, используемый SQL, будут быстрее – nrathaus

+1

Ожидается ли, что ваш код будет работать на MS SQL? – nrathaus

+0

Да. Я так и не подумал об этом. Поэтому я могу преобразовать параметр в мою дату + 23:59:59 .. Если кто-нибудь может посоветовать, как это сделать, я был бы благодарен. Только начиная с SQL и его немного кривой обучения от VBA. –

ответ

0

Если вы используете SQL Server (ваш запрос выглядит так), а ваш номер версии SQL Server - 2008 и выше, вы можете легко избавиться от времени часть datetime путем приведения его в date

cast(datetimecolumn as date) 

В вашем случае это будет:

Select g.* 
From egtable..headerinfo as g 
WHERE g.istatus BETWEEN 5 AND 10 AND 
cast([timestamp] as date) = cast('<%parameterDate%>' as date) 
+0

Большинство SQL не требуют этого случая до сравнения, они делают это на их собственный, разве MS SQL не обрабатывает его автоматически? – nrathaus

+0

@nrathaus Если вы сравниваете типы 'datetime', вы всегда сравниваете дату и время. Кастинг в 'date' - это простой способ сравнить только дату. – Szymon

+1

Благодарим вас за освобождение – nrathaus

0

Предполагая, что вы используете MySQL, так как вы не заявить, что вы использовали вы можете использовать это:

Select g.* 
From egtable..headerinfo as g 
WHERE g.istatus BETWEEN 5 AND 10 AND 
timestamp = MAKEDATE(SUBSTRING('<%parameterDate%>', 4, 2), 
         SUBSTRING('<%parameterDate%>', 1, 2), 
         SUBSTRING('<%parameterDate%>', 6, 4)) 

MAKEDATE в MySQL создает поле даты для вас на основе ввода даты, месяца, года

+0

Извините, не можете использовать это. Не использовать MySQL. –

+0

См. Http://stackoverflow.com/questions/266924/create-a-date-with-t-sql о том, как сделать что-то подобное в MSSQL – nrathaus

Смежные вопросы