Преобразование типов Datetime в SQL

#sql #.net #sql-server #sql-server-2008 #datetime

#sql #.net #sql-сервер #sql-server-2008 #datetime

Вопрос:

Я получаю данные из какого-то внешнего источника данных, и их необходимо сохранить в таблице SQL server. Но один файл в нем — Datetime . Но я получаю это поле datetime в формате Varchar, и теперь в моей таблице SQL мне нужно сохранить его как тип данных DateTime.

 CONVERT(DATETIME,[Date_time],03) 
  

— Этот код работает в моей среде разработки, но не в рабочей среде.

 CONVERT(DATETIME,[Date_time],120) 
  

— Этот код работает в моем производстве, но не в разработке.

Это затрудняет перенос кода из разработки в производство, поскольку мне приходится вносить изменения в тестируемый код.

Пожалуйста, обратите внимание, что я использую SQL server 2008 R2.

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

Комментарии:

1. Почему в вашей производственной среде и среде разработки разные культуры? Что-то не так.

2. Я предполагаю, что у вас есть некоторый .net-код, использующий данные из внешнего источника… Я не очень знаком с порядком вещей .net, но, по-видимому, коду ur требуется некоторый условный оператор в зависимости от среды, в которой он выполняется. Вы могли бы попробовать выдать select @@Version SQL и в зависимости от того, что вы получите обратно, иметь условный оператор для обработки различных сред. Вот еще немного информации об этом — msdn.microsoft.com/en-us/library/ms177512.aspx — Надеюсь, это поможет.

3. Версия SQL такая же, но, как я уже говорил, культуры разные, поэтому необходимо использовать другой стиль преобразования. Я поднял этот вопрос перед своим менеджером, почему в обеих средах разные культуры? но мне даже нужно попробовать самому найти способ решить эту проблему..

4. Привет, TMNT2014, я не извлекаю данные из .net. Но использование openquery в SQL для его извлечения. Все данные, извлеченные в SQL, в порядке, но есть проблема только с этим Datetime, поданным из-за разной культуры на обоих серверах. Решение, которое вы мне сказали, это то, что я даже использовал. Но я хочу проверить, существует ли какой-либо стандартный способ решения этой проблемы, вместо того, чтобы писать условие if else на основе имени сервера. Поскольку в долгосрочной перспективе сервер может измениться, и коды начнут ломаться. Надеюсь, вы понимаете мою проблему. Большое спасибо.

5. Похоже, у вас проблема со стандартизацией… где вы не можете стандартизировать среды ur, но ваш код должен быть стандартизирован. Если вы найдете стандартный способ решения этой проблемы, пожалуйста, дайте мне знать.. Удачи

Ответ №1:

Вы можете попробовать использовать SET оператор для переопределения формата даты, что-то вроде этого:

 SET DATEFORMAT mdy;
SELECT CONVERT(DATETIME, [Date_Time], 120);
  

Пока вы включаете этот код в свою хранимую процедуру / запрос в обеих средах, все должно быть в порядке. Возможно, вы захотите прочитать об этом в MSDN.

Ответ №2:

Обходным путем для вашей проблемы было бы предоставить функцию, которая вычисляет (или определяет) правильный стиль для каждой среды. Этот самый простой вариант будет определяемой пользователем функцией.

 CREATE FUNCTION [dbo].[fnCustomDateStyle]()
RETURN int AS
BEGIN
  RETURN 3 # Or 120, in the other environment
END
  

Который можно использовать в любой среде, таким образом:

 CONVERT(DATETIME, [Date_Time], fnCustomDateStyle())
  

Комментарии:

1. Я использую тот же метод из прошлого. Но искал, есть ли какой-либо другой стандартный способ. Bcoz этот код мне нужно изменить, когда происходит изменение имени сервера.

2. Могу ли я в любом случае получить информацию о культуре SQL Server, написав sql-запрос?