Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > 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. В соединении с БД используй явное указание формата даты и времени. Например, если после соедиения с БД выполнить команду:
Код

SET DATEFORMAT dmy

то все даты в данном соединении сервер будет воспринимать как DD.MM.YYYY.
3. Выполни настройку SQL-сервера, но нет гарантии что тебе ее кто-то снова не изменит. Я этим способом не пользуюсь, поэтому даже не знаю как это сделать smile.


Автор: Papirus 16.9.2005, 08:32
Как то на форуме мне посоветовали одну вещь. Передавать на сервер даты в формате
Код

'20050915'

Т.е. как текст где слитно идут годмесяцдень. Очень мне нравиться такой способ. Он не зависит от настроек сервака.
Еще при написании запросов можно явно конвертить дату в любой формат - "сервак поймет"
Код

convert(datetime,#17/02/2005#, 102)

Автор: boevik 18.9.2005, 20:01
Цитата(Papirus @ 16.9.2005, 08:32)
Как то на форуме мне посоветовали одну вещь. Передавать на сервер даты в формате
Код

'20050915'

Т.е. как текст где слитно идут годмесяцдень. Очень мне нравиться такой способ. Он не зависит от настроек сервака.

Так же не зависимый формат 'yyyy-mm-dd'
Код

'2005-09-15'


Автор: 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
Цитата(boevik @ 18.9.2005, 20:01)
Так же не зависимый формат 'yyyy-mm-dd'


Этот даже лучше, чем тот, что я предложил. Он не зависит от количества цифр при обозначении месяца и дня. '20050217' - обязательно должны быть 2. А в этом вполне прооходит '2005-2-9'.
smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)