|
|
|
Формат даты в SQL запросе
|
|||
|---|---|---|---|
|
#18+
В поле даты [ПолеДаты] на SQL Server дата хранится в формате ##.##.## (например, 19.07.1996) Как правилно писать дату в SQL-команде? Я пишу Select count(ID) where [ПолеДаты] Between '01.07.1996' And '31.07.1996' Но чета не работает. Выскакивает исключение ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2008, 20:13 |
|
||
|
Формат даты в SQL запросе
|
|||
|---|---|---|---|
|
#18+
Вопрос для подфорума по SQL Server. Но давайте здесь разберемся. Судя по вопросу, дата хранится в виде строки. Это так? Если нет, то какой тип данных используется? Если datetime/smalldatetime, то вы неправы относительно формата хранения даты. Если дата хранится как символьное значение (varchar/nvarchar/char/nchar), то BETWEEN в таком виде работать не будет, потому что он будет сравнивать строки, а не даты (разницу понимаете?). авторВыскакивает исключениеКакое??? В общем информации мало. Укажите структуру таблицы и возникающее исключение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2008, 20:47 |
|
||
|
Формат даты в SQL запросе
|
|||
|---|---|---|---|
|
#18+
Хотя нет. Команда выполняется. Исключение выбрасывается на строчке . . while(dr.Read()) . . dr - объект DataReader текст исключения - The conversion of a char data type to datetime data type resulted in a out-of-range datetime value. at System.Data.SqlClient.SqlDataReader.Read() о чем тут речь? как исправить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2008, 20:49 |
|
||
|
Формат даты в SQL запросе
|
|||
|---|---|---|---|
|
#18+
нет. дата нестрока. это точно. тип datetime ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2008, 20:53 |
|
||
|
Формат даты в SQL запросе
|
|||
|---|---|---|---|
|
#18+
Вот кусок кода где ошибка возникает Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2008, 20:57 |
|
||
|
Формат даты в SQL запросе
|
|||
|---|---|---|---|
|
#18+
авторThe conversion of a char data type to datetime data type resulted in a out-of-range datetime valueСервер при выполнении BETWEEN пытается преобразовать операнды к типу datetime. Так вот на '31.07.1996' он споткнулся. Почему? Да потому, что он посчитал, что 31 - это месяц. Варианты решения проблемы: 1) используйте строковое представление дат в формате ANSI. Подробнее см. Books Online. 2) Преобразуйте строки к датам с помощью CONVERT или CAST с явным указанием формата строк. Подробнее также см. Books Online. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2008, 00:23 |
|
||
|
Формат даты в SQL запросе
|
|||
|---|---|---|---|
|
#18+
А почему же он первую дату переварил а споткнулся тока на второй? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2008, 09:26 |
|
||
|
Формат даты в SQL запросе
|
|||
|---|---|---|---|
|
#18+
авторА почему же он первую дату переварил а споткнулся тока на второй?Ну сами подумайте немного! "01.07.1996" можно распознать как: 1) 1 июля 1996 года 2) 7 января 1996 года ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2008, 10:56 |
|
||
|
Формат даты в SQL запросе
|
|||
|---|---|---|---|
|
#18+
Спасибо. Реально помог. А то бы я вообще закопался Проблема пока решается так. Сначала пишу МЕСЯЦ, потом ДАТУ, а затем ГОД. Вроде работает. А вот что будет когда придется работать с полем где помиом даты еще и время хранится - черт его знает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2008, 11:17 |
|
||
|
Формат даты в SQL запросе
|
|||
|---|---|---|---|
|
#18+
авторПроблема пока решается так. Сначала пишу МЕСЯЦ, потом ДАТУ, а затем ГОД. Вроде работает. Поверьте! Это не решение проблемы! Вы просто ушли от проблемы в данных конкретных условиях. Если у вас элементарно поменяются настройки сервера, вы опять столкнетесь с это проблемой. Корректные варианты решения я уже привел выше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2008, 11:24 |
|
||
|
Формат даты в SQL запросе
|
|||
|---|---|---|---|
|
#18+
Не понял че такое Books Online. Кастинг где делать? В коде приложения или в СУБД? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2008, 11:31 |
|
||
|
Формат даты в SQL запросе
|
|||
|---|---|---|---|
|
#18+
SQL Server Books Online - документация по SQL Server CAST/CONVERT - операторы Transact-SQL. Соответсвенно имеется в виду кастинг на уровне SQL-запроса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2008, 11:51 |
|
||
|
Формат даты в SQL запросе
|
|||
|---|---|---|---|
|
#18+
Спасибо еще раз. В MSDN тоже есть инфа. Воспользовался CONVERT. А CAST наверное не подойдет для даты, там нет параметра Style, как раз отвечающего за формат даты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2008, 12:45 |
|
||
|
Формат даты в SQL запросе
|
|||
|---|---|---|---|
|
#18+
Еще кое-что по поводу этого запроса. Нужно сделать этот запрос параметризированным. Т.е в качестве параеметра передавать объект Command начальную и конечную дату. Что то вроде Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Исключение- Arithmetic overflow error converting expression to data type datetime Как это сделать правильно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2008, 14:29 |
|
||
|
Формат даты в SQL запросе
|
|||
|---|---|---|---|
|
#18+
DateTime передавай, а не строку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2008, 14:34 |
|
||
|
Формат даты в SQL запросе
|
|||
|---|---|---|---|
|
#18+
о да! а что изменится если использовать OleDb провайдер? там же вместо маркеров используются знаки вопроса. Как добавлять тогда параметры в коллекцию Command.Parameters? Вот так? Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2008, 14:46 |
|
||
|
Формат даты в SQL запросе
|
|||
|---|---|---|---|
|
#18+
там соответсвенно OleDbType.DateTime ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2008, 14:48 |
|
||
|
Формат даты в SQL запросе
|
|||
|---|---|---|---|
|
#18+
DateTime должно стоять после cmd.Parameters[ююю].Value = а там где знаки вопроса - любые уникальные идентификаторы. в том же порядке, как в запросе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2008, 15:00 |
|
||
|
Формат даты в SQL запросе
|
|||
|---|---|---|---|
|
#18+
автора что изменится если использовать OleDb провайдер?А зачем вам для SQL Server использовать OleDb-провайдер? Используйте родной SqlClient. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2008, 15:23 |
|
||
|
Формат даты в SQL запросе
|
|||
|---|---|---|---|
|
#18+
Есть два варианта 1) вам уже сказали-передавать Datetime как параметр 2) Использовать стандарт ANSI- YYYYMMDD, т.е. передавать '19960701' и '19960731'-работает при любых настройках SQL сервера(Microsoft-я надеюсь у вас он?) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2008, 15:25 |
|
||
|
Формат даты в SQL запросе
|
|||
|---|---|---|---|
|
#18+
есть ещё несколько правильных - установить на сессию нужный формат даты SET DATEFORMAT DMY, например - установить для пользователя необходимые региональные установки представления даты выбрав для "пользователя бд" соответствующий язык. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2008, 17:06 |
|
||
|
Формат даты в SQL запросе
|
|||
|---|---|---|---|
|
#18+
Ken@tесть ещё несколько правильных - установить для пользователя необходимые региональные установки представления даты выбрав для "пользователя бд" соответствующий язык. Только не для пользователя бд, а для Login-а который "смапирован" на пользователя базы данных. С уважением, Алексей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2008, 13:40 |
|
||
|
Формат даты в SQL запросе
|
|||
|---|---|---|---|
|
#18+
авторSQL Server дата хранится в формате ##.##.## авторнет. дата нестрока. это точно. тип datetime если прочитать второе утверждение, то первое становиться абсурдным. присваивайте значениям параметров не строковые а DateTime значения и будет вам счастье. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2008, 14:00 |
|
||
|
|

start [/forum/topic.php?fid=17&msg=35122439&tid=1352413]: |
0ms |
get settings: |
10ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
172ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
65ms |
get tp. blocked users: |
2ms |
| others: | 237ms |
| total: | 526ms |

| 0 / 0 |
