我正在移动一些数据,我需要提出一个 TSQL 语句来将当前日期时间字段中的日期转换为另一个具有 varchar MM/yy 格式的数据库字段。
此语句需要同时在 SQL Server 2k5和SQL Compact Edition 3.5 上工作 - 因此答案需要基于“设置”并且不包括 SQLCE 不支持的游标等。
我正在移动一些数据,我需要提出一个 TSQL 语句来将当前日期时间字段中的日期转换为另一个具有 varchar MM/yy 格式的数据库字段。
此语句需要同时在 SQL Server 2k5和SQL Compact Edition 3.5 上工作 - 因此答案需要基于“设置”并且不包括 SQLCE 不支持的游标等。
如果您曾经在非美国数据库服务器上运行,则依赖于类型,即“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 )
不完全是您想要的,但您应该能够轻松更改:
DECLARE @ddate datetime
set @ddate = getdate()
SELECT CAST(DATEPART(month, @ddate) as varchar(2)) + '/' + CAST(DATEPART(year, @ddate) as varchar(4))
像这样的东西怎么样...
select substring(convert(varchar(8),yourdatefield,3),4,5) as newdate
from yourtable
所以,例如,
select substring(convert(varchar(8),getdate(),3),4,5)
给出“02/09”。
查看 DATEPART() 函数的联机丛书文档。
http://msdn.microsoft.com/en-us/library/ms187928.aspx
转换为类型 3 并修剪最后三个字符。