2012-06-12 5 views
1

Я нахожусь в процессе миграции нашего хранилища данных из Oracle в SQL Server 2012.Oracle в SQL Server: Дата преобразования и формат

Один кусок кода я использую сто раз в день в Oracle меняется формат даты для запроса, используя что-то вроде:

To_Char(entry_date,'WMMYY') = 30612 

выше позволяет мне захватить даты (формат по умолчанию = DD-MON-YY например 01-JAN-12) и изменить формат в течение недели, указанной (на третьей неделе июня в вышеуказанном пример), просто указав желаемую неделю.

На мой взгляд, это очень простой и простой в использовании. Я могу изменить его в любом формате, который я хочу (MMYY, MMYYYY) и т. Д. Без каких-либо проблем. Пока я не могу найти простой способ сделать это в SQL Server 2012, и это действительно начинает беспокоить меня. Это datetime2 в SQL Server.

Я нахожу материал для CAST(), CONVERT(), DATEPART(), но из того, что я видел, требуется всевозможные дурацкие кодировки и коды номеров (например, 101, 102, я не понимаю, почему это), которые просто кажутся посторонними и более сложный для меня.

Я только что не нашел то, что я ищу, или это так, как в SQL Server? Я просто хочу сделать что-то простое, например, захватить все данные, которые были введены в течение месяца июня или второй недели октября, без необходимости добавлять 200 дополнительных символов кода.

+1

Переход от Oracle в SQL Server является огромным шагом назад когда дело доходит до обработки даты (и многих других вещей). Насколько я могу судить, вам нужно будет написать свою собственную функцию для этого –

ответ

0

Это переключатель. Вы используете SQL Server 2012, поэтому загляните в функцию FORMAT(). http://technet.microsoft.com/en-us/library/hh213505%28SQL.110%29.aspx Я не, к сожалению, я ничего не могу проверить для вас, но есть некоторые улучшения форматирования даты. Для тех из нас, кто не является, - есть вещи, которые вы можете сделать, это будет здорово - как только вы привыкнете к ним. Это не относится к SQL Server, но неделя месяца варьируется от организации к организации, поэтому вам нужно будет определить, что это хороший пример для третьей недели месяца и т. Д. Также при использовании DATEPART с аргументами недели или дня , то, что возвращается, определяется настройкой для первого дня недели (1 -7 - @@DATEFIRST). Числовые стили для CONVERT (снова проверьте FORMAT(), если вы в 2012 году), определенно не такие интуитивные, но вы, вероятно, будете использовать одни и те же стили снова и снова, и вы быстро их запомните. Если вы настроены на «WMMYY» или просто используете что-то снова и снова, у которого нет удовлетворительного встроенного решения, создайте UDF.

данные, которые были введены в течение месяца июня

DATEPART(mm,@date) = 6 

текущий месяц

month(getDate()) 

Или на этой неделе

DATEPART(ww,GetDate()) 
+0

Спасибо за комментарии ребята. Я не понимал, что SQL Server был таким шагом назад от Oracle, когда дело доходит до обработки даты. Это просто кажется таким здравым смыслом, и я уверен, что тысячи людей используют SQL-сервер, чтобы делать именно то, что мне нужно. Похоже, это будет немного корректировка. Я рассмотрю FORMAT(). Еще раз спасибо. – user1452180

Смежные вопросы