| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > MS SQL Server > Глюк с настройками даты |
| Автор: ssboy 15.9.2005, 13:01 |
| Люди, помогите, плиз! Все знают, что в MS SQL при написании запросов с участием типа "дата/время" месяц нужно ставить на первое место. Сервак работал нормально, вдруг я обнаружил, что на серваке это правило перестало действовать и теперь на первом месте стоит день. Что надо сделать, чтобы все вернуть на прежнее место? Все проги дают ошибку конвертации из-за такой каши с настройками. |
| Автор: ssboy 15.9.2005, 13:46 |
| Использовал sp_defaultlanguage, помогло. |
| Автор: Петрович 16.9.2005, 08:15 | ||
| 1. В программе крайне нежелательно использовать текстовое представление даты и времени. Испрользуй передачу таких значений через параметры запроса (Params) 2. В соединении с БД используй явное указание формата даты и времени. Например, если после соедиения с БД выполнить команду:
то все даты в данном соединении сервер будет воспринимать как DD.MM.YYYY. 3. Выполни настройку SQL-сервера, но нет гарантии что тебе ее кто-то снова не изменит. Я этим способом не пользуюсь, поэтому даже не знаю как это сделать |
| Автор: Papirus 16.9.2005, 08:32 | ||||
Как то на форуме мне посоветовали одну вещь. Передавать на сервер даты в формате
Т.е. как текст где слитно идут годмесяцдень. Очень мне нравиться такой способ. Он не зависит от настроек сервака. Еще при написании запросов можно явно конвертить дату в любой формат - "сервак поймет"
|
| Автор: boevik 18.9.2005, 20:01 | ||||||
Так же не зависимый формат 'yyyy-mm-dd'
|
| Автор: Jonny 19.9.2005, 07:33 |
| Могу предложить следующую функцию, преобразования даты в строку для использования в димамическом SQL: CREATE FUNCTION dbo.DateToStr (@date datetime ) RETURNS varchar(10) AS BEGIN Declare @dDate varchar(10) set @dDate= ''''+cast(year(@date) as varchar(4)) +case when month(@date)<10 then '0'+cast(month(@date) as varchar(1)) --10.07.2005 Jonni else Cast(month(@date) as varchar(2)) end +case when day(@date)<10 then '0'+cast(day(@date) as varchar(1)) else Cast(day(@date) as varchar(2)) end +'''' Return(@dDate) END |
| Автор: Papirus 20.9.2005, 08:17 | ||
Этот даже лучше, чем тот, что я предложил. Он не зависит от количества цифр при обозначении месяца и дня. '20050217' - обязательно должны быть 2. А в этом вполне прооходит '2005-2-9'. |