2009-02-23 6 views
2

Я перемещаю некоторые данные, и мне нужно придумать инструкцию TSQL для преобразования дат, находящихся в настоящее время в поле datetime, в другое поле базы данных с форматом varchar MM/yy.Преобразование даты в TSQL

Это заявление должно работать как на SQL Server 2k5 , так и на SQL Compact Edition 3.5 - поэтому ответ должен быть «установлен» на основе и не включать курсоры и т. Д., Которые не поддерживаются в SQLCE.

ответ

2

, полагающийся на тип, то есть «101» может быть опасным, если вы когда-либо запускались на сервере, не принадлежащем к США, по мере того, как mm и dd будут переключаться. Возможно, то же самое с использованием типа «3». Пока вы знаете, что язык сервера всегда будет одним и тем же, эти методы являются самыми легкими.

Использование DatePart, вероятно, более надежным, но если вы хотите сказать, 03/08 вместо 3/08, вы должны убедиться, что префикс месяц с «0», так

select 
    right('00' + convert(varchar(2), datepart(mm, @ddate)), 2) + '/' + 
    right(convert(varchar(4), datepart(yy, @ddate)), 2) 
+0

Это лучший ответ для нашей ситуации - поскольку локаль сервера может меняться. Оглядываясь назад, я должен был включить это в вопрос. Спасибо всем за ваше время и ответы. – gleng

+0

Да, вы правы. измельчение с 101 по 5 даст вам MM/dd не MM/yy – Sung

0

Ознакомьтесь с документацией «Книги в Интернете» для функции DATEPART().

1

Не совсем то, что вы хотите, но вы должны быть в состоянии легко изменить:

DECLARE @ddate datetime 

set @ddate = getdate() 

SELECT CAST(DATEPART(month, @ddate) as varchar(2)) + '/' + CAST(DATEPART(year, @ddate) as varchar(4)) 
1

Как о чем-то вроде этого ...

select substring(convert(varchar(8),yourdatefield,3),4,5) as newdate 
from yourtable 

Так, например,

select substring(convert(varchar(8),getdate(),3),4,5) 

дает "02/09".

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

  • Нет связанных вопросов^_^