sql - SQL 更新查询以替换列中的最后 4 个字符
问题描述
我需要替换列中的最后四个字符。目前是 char 格式的一年,我需要用当前年份替换。我现在使用的代码成功地删除了旧年份,但无法输入所需的新年份。
我当前的代码:
DECLARE @NewYear as Char
SELECT @NewYear = cast(YEAR(GETDATE()) as char(4))
UPDATE MyTable
SET ENDDATE = (substring(ENDDATE, -5, len(ENDDATE)) +@NewYear)
WHERE EndDate < StartDate
原始值 - 01/01/2017 结果 - 01/01/ 期望结果 - 01/01/2020
这在 SAS Proc SQl pass through - ANSI Standard SQL 中使用
任何帮助,将不胜感激。谢谢!
解决方案
你的变量声明有问题。它应该被声明为char(4)
- 否则它默认为char(1)
value'2'
而不是2020
.
此外,您可以使用left
o 子字符串。
这是一种方法:
DECLARE @NewYear as Char(4)
SELECT @NewYear = CAST(YEAR(GETDATE()) as char(4))
UPDATE MyTable
SET ENDDATE = LEFT(ENDDATE , len(ENDDATE) - 4) + @NewYear
WHERE EndDate < StartDate
请注意,在这里使用变量几乎没有什么好处。很可能,数据库将优化表达式,而不是getdate()
对每一行进行基于 - 的计算。
UPDATE MyTable
SET ENDDATE = LEFT(ENDDATE , len(ENDDATE) - 4) + cast(YEAR(GETDATE()) as char(4))
WHERE EndDate < StartDate
推荐阅读
- android - 无法避免手动施法
- flutter - Flutter web:'webdev build'时出现空白屏幕
- python - 展平包含子列表的列表
- javascript - div元素在滚动回它后不会重新出现
- r - 是否有可以将现有指标转换为新逻辑指标的 R 函数?
- java - 在`finish()`之后没有调用onActivityResult - 调用被调用的活动
- javascript - 如何替换 dataframe-js 中的列值?
- c# - 使用 DisplayFor HTML Tag Helper 时格式化日期
- rxjs - RXJS flatMap 到重复的 observable
- arrays - Redim Preserve 多维数组