SQL在“特定日期之前”替换并更新日期时间字符串

时间:2018-03-13 09:13:28

标签: sql sql-server string date replace

我有Date字符串(varchar)格式的数据字段yyyyMMdd。如何在某个特定日期(比如20180201)到某个月(如2018年3月)之前更换所有内容!?只有年份和月份都会改变,请保持这一天。

示例:字符串 20160913 将更改为 20180313 ,但 20180224 将保持原样,因为它是在之后> 20180201

3 个答案:

答案 0 :(得分:1)

将该字符串转换为搜索大于日期的日期,并使用子字符串提取日期部分以构建新的日期字符串。

declare @NewYear varchar(4) = '2018'
declare @NewMonth varchar(2) = '03'
declare @PivotDate date = '2018-02-01'

update myTable set MyField = @NewYear + @NewMonth + substring(MyField, 6, 2)
where convert(date, MyField, 112) > @PivotDate

答案 1 :(得分:1)

我建议这样做:

declare @NewYear varchar(4) = '2018';
declare @NewMonth varchar(2) = '03';
declare @PivotDate date = '2018-02-01';

update myTable
    set MyField = @NewYear + @NewMonth + right(MyField, 2)
where myfield < convert(varchar(255), @PivotDate, 112);

此解决方案的重要部分是where子句。特别是,myfield上没有允许使用索引的函数调用。允许索引的表达式称为 sargable

答案 2 :(得分:1)

我建议这样做,因为如果@NewMonth&lt; 2月,那可能是个问题。

declare @NewYear varchar(4) = '2018'
declare @NewMonth varchar(2) = '02'
declare @PivotDate date = '2018-02-01'

update myTable set MyField = DATEADD(day,(right(MyField, 2)-1),cast((@NewYear + @NewMonth + '01') as date))
where convert(date, MyField, 112) > @PivotDate

谢谢!