Изменение формата даты по умолчанию для единой базы данных в SQL Server
Мне нужно изменить формат даты из США (мм/дд/гггг) в Великобританию (дд/мм/гггг) в одной базе данных на машине SQL-сервера.
Как это можно сделать?
Я видел заявления, которые делают это для всей системы, и те, которые делают это для сеанса, но теперь я не могу изменить код, так как ему придется снова пройти QA, поэтому мне нужно быстрое исправление для изменения формата даты.
Обновление
Я понимаю, что время даты не имеет ничего общего с тем, как SQL Server хранит данные, но он имеет много общего с тем, как он анализирует запросы.
Я вывожу необработанные данные из файла XML в базу данных. Даты в файле XML представлены в формате даты в Великобритании.
Ответы
Ответ 1
Вы можете использовать SET DATEFORMAT, как в этом примере
declare @dates table (orig varchar(50) ,parsed datetime)
SET DATEFORMAT ydm;
insert into @dates
select '2008-09-01','2008-09-01'
SET DATEFORMAT ymd;
insert into @dates
select '2008-09-01','2008-09-01'
select * from @dates
Вам нужно будет указать формат даты в коде при анализе данных XML
Ответ 2
Чтобы не справляться с этими очень скучными проблемами, я советую вам всегда анализировать ваши данные с стандартным и уникальным форматом даты SQL/ISO, который является YYYY-MM-DD. Затем ваши запросы будут работать на международном уровне, независимо от параметров даты на главном сервере или на клиентах запросов (где локальные параметры даты могут отличаться от настроек основного сервера)!
Ответ 3
Хотя вы не можете установить формат даты по умолчанию для одной базы данных, вы можете изменить язык по умолчанию для входа, который используется для доступа к этой базе данных:
ALTER LOGIN your_login WITH DEFAULT_LANGUAGE=British
В некоторых случаях это помогает.
Ответ 4
Вы можете изменить язык всего сервера, а не отдельные базы данных. Однако, если вам необходимо поддерживать Великобританию, вы можете выполнить следующую команду перед всеми входами и выходами:
set language 'british english'
Или, если у вас возникли проблемы с вводом данных из вашего приложения, вы можете рассмотреть универсальный тип ввода, например
1-Dec-2008
Ответ 5
Если это действительно проблема QA, и вы не можете изменить код. Настройте новый экземпляр сервера на компьютере и настройте язык как "британский английский"
Ответ 6
Вы понимаете, что формат не имеет ничего общего с тем, как SQL Server хранит дату и время, правильно?
Вы можете использовать set dateformat
для каждого сеанса. Нет настроек для базы данных.
Если вы используете параметры для вставки или обновления данных или при фильтрации, у вас не будет никаких проблем с этим.
Ответ 7
Использование:
select * from mytest
EXEC sp_rename 'mytest.eid', 'id', 'COLUMN'
alter table mytest add id int not null identity(1,1)
update mytset set eid=id
ALTER TABLE mytest DROP COLUMN eid
ALTER TABLE [dbo].[yourtablename] ADD DEFAULT (getdate()) FOR [yourfieldname]
Он работает на 100%.
Ответ 8
Для запуска SQL Server 2008:
EXEC sp_defaultlanguage 'username', 'british'