2013-06-28 5 views
0

как я собираюсь преобразовать дату в строку? моя база данных - plsql, и дата была введена из основного выбора даты, который я назначаю как bdp1.Как преобразовать дату в строку в plsql?

select * from smsdw.lot_act where (tran_dttm <= to_date('4/20/2012', 'MM/DD/YYYY') and tran_dttm > to_date('4/19/2012' ,'MM/DD/YYYY')) 
+0

мой вход, который я вставляю из основного выбора даты, читается как дата, а не строка, но в моем db находится строка, поэтому мне нужно преобразовать свой ввод как строку. – Husna5207

+0

Ваш запрос верный. В чем проблема? – Ben

+0

если я хочу найти дату '4/19/2012' да, я могу получить результат. но если я хочу перефразировать его как параметр, я не могу. это запрос от oracle. – Husna5207

ответ

1

Ваш формат и ваша строка не согласны.

Вам нужно 0 перед 4, вот так: 04/20/2012.

Или вам нужно настроить свой формат, например: M/D/YYYY
На второй взгляд, то to_date() documentation не показывает поддержку одного M. Вам нужно включить ведущий 0 с вашим месяцем, а один D за день будет крайне глупым.


Обновление на основе вашего комментария. Позвольте мне привести, однако, сказать, что использование конкатенации строк для замещения данных в таких запросах evil и, вероятно, приведет к взлому вашего приложения.

Dim queryString As String = "select * from smsdw.lot_act where (tran_dttm <= to_date('" & bdp1.ToString("MM/dd/yyyy") & "','MM/DD/YYYY') and tran_dttm > to_date('" & bdp1.ToString("MM/dd/yyyy") & "' ,'MM/DD/YYYY')" 

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

Dim queryString As String = "select * from smsdw.lot_act where tran_dttm <= :bdp1 and tran_dttm > :bdp1 " 

command.Parameters.Add(":bdp1", SqlDbType.DateTime).Value = bdp1 

Но опять-таки: различные библиотеки могут справиться с этим немного отличаются. Некоторым требуется символ :, некоторые его не позволяют, а некоторые работают над порядком, а не по имени (что означает, что вам нужно будет добавить параметр дважды).

+0

ok Я пытаюсь преобразовать, как это, но его не работает >> Dim queryString As String = "select * from smsdw.lot_act где (tran_dttm <= to_date ('" & bdp1.Month & "/" & bdp1.Date & "/" & bdp1.Year & "/, 'DD/MM/YYYY') и tran_dttm> to_date ('" & bdp1 & "', 'MM/DD/YYYY') – Husna5207

+0

@ Husna5207, код которого уязвим для SQL-инъекции. Практически попрошайничать взломать. Время читать по параметрам запроса/подготовленным операциям. –

+0

ОК, то что я могу сделать? – Husna5207