我需要将数据从a列插入b列。
列A样本值:
CustomerDB_2016_12_12_203001_9284029
CustomerDB_2016-12_11_203005_8572784
CustomerDB_2016-12_10_203353_5347358
等等
B栏是空白
我需要B列存储如下的值(来自A列)
2016-12-12
2016-12-11
2016-12-10
等等
这可以在sql server中使用吗?
感谢。
答案 0 :(得分:4)
update query可以执行此操作:
UPDATE
YourTableName
SET
ColumnB = CAST(REPLACE(SUBSTRING(ColumnA, 12, 10), '_', '-') AS DATE)
;
另一种方法是使用computed column。
DECLARE @Sample TABLE
(
ColumnA VARCHAR(255),
ColumnB AS CAST(REPLACE(SUBSTRING(ColumnA, 12, 10), '_', '-') AS DATE)
)
;
INSERT INTO @Sample
(
ColumnA
)
VALUES
('CustomerDB_2016_12_12_203001_9284029'),
('CustomerDB_2016-12_11_203005_8572784'),
('CustomerDB_2016-12_10_203353_5347358')
;
两种方法都返回:
ColumnA ColumnB
CustomerDB_2016_12_12_203001_9284029 2016-12-12
CustomerDB_2016-12_11_203005_8572784 2016-12-11
CustomerDB_2016-12_10_203353_5347358 2016-12-10
如果要保持两列同步,我建议使用计算列。否则请更新。
我已使用cast显式设置返回的数据类型。
我已使用replace重新格式化日期。 YYYY-MM_DD成为YYYY-MM-DD。第二种格式可以直接从字符串转换为日期。第一个不能。
我已经使用substring从第12位开始提取10个字符。
修改强>
尝试从另一个值中提取一个值通常非常棘手。在这种情况下,有几种不同的格式可以应对。
此更新查询使用一系列replace函数从ColumnA中删除CustomerDb,备份,下划线和短划线。剩下的应该是一个以YYYYMMDD开头的字符串。提取此值并将其转换为日期。
-- Each replace strips away unrequired characters,
-- leaving us with a string in the format YYYYMMDD.
UPDATE
@Sample
SET
ColumnB = CAST(LEFT(REPLACE(REPLACE(REPLACE(REPLACE(ColumnA, 'CustomerDB', ''), '_', ''), '-', ''), 'BACKUP', ''), 8) AS DATE)
;
这个问题有更好的方法。但是,此解决方案更易于编辑和扩展。