如果日期向量有两位数的年份,则mdy()将 00 到 68 之间的年份转换为 21 世纪年份,将 69 到 99 之间的年份转换为 20 世纪年份。 例如: 给出以下输出: 我可以通过从不正确的日期中减去 100 将 2054 和 2068 变成 1954 和 1968 来解决这个问题。解析 ...
提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供 中文繁体 英文版本 中英对照 版本,有任何建议请联系yoyou2525@163.com。
编辑:强制使用 2008 R2
我需要将两位数的年份附加到发票号(为简单起见,我使用了测试变量)。 以前我只需要附加月份和日期,但客户现在要求输入两位数的年份。
我的方法: REPLACE + SUBSTRING + STR + YEAR(可变日期时间)
REPLACE((SUBSTRING(STR (Year(@Date),4),3,2)), ' ', '0')**
我的代码:
DECLARE @TestVariable AS VARCHAR(100),
@Date as datetime = GetDate()
SET @TestVariable = '1234'
+ REPLACE(STR(MONTH(@Date), 2), ' ', '0')
+ REPLACE(STR(DAY(@Date), 2), ' ', '0')
+ REPLACE((SUBSTRING(STR (Year(@Date),4),3,2)), ' ', '0')
PRINT @TestVariable
您可以简化整个过程,而不仅仅是年份部分。 使用 FORMAT,您可以轻松完成此操作。
DECLARE @TestVariable AS VARCHAR(100) = '1234'
, @Date as datetime = GetDate()
Select @TestVariable + FORMAT(@Date, 'MMddyy')
老实说,不要再使用 2 位数的年份了; 吸取上世纪错误的教训,使用4位数。
如果你“不得不”,那么你可以使用带有样式代码的CONVERT
,然后用空字符串替换字符:
DECLARE @TestVariable varchar(100) = '1234',
@Date datetime = GETDATE();
SELECT @TestVariable + REPLACE(CONVERT(varchar(8),@Date, 1),'/','');
select replace(convert(varchar(20),@date,1)'/','') --or any other you need
查看文档
我会回应其他人的观点“你真的必须使用两位数的年份”吗? 但如果你必须这样做,我喜欢这种东西
set @TestVariable = '1234'
+ right('0' + cast(month(@date) as varchar(2)), 2)
+ right('0' + cast(day(@date) as varchar(2)), 2)
+ right('0' + cast(year(@date) % 100 as varchar(2)), 2);
为了讨论一般方法,我使用right('0', «something», 2)
作为将填充到两个位置的方法,使用cast(«something» as varchar(2))
来获取字符串一个数字(因此隐式转换不只是添加零和相关的日期部分),最后是year(@date) % 100
以获得日期的最后两位数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.