比较列以检查数据错误

时间:2017-01-04 13:19:11

标签: tsql sql-server-2008-r2

我有一个包含4个重要数据列的表。 CusNo,描述,年份和周。所有列数据类型都是CHAR,无法更改。

数据格式为

CusNo    Description        Year    Week
C2134    ROY WK 41, 2016    2016    41
C1152    ROY WK 41, 2016    2016    41
C1589    ROY WK 41, 2016    2016    41
C1921    ROY WK 41, 2016    2016    40

有时,周列的值会被误导,导致我们的报告显示缺失的一周,如上面的最后一个值所示。在这种特殊情况下,公司C1921的报告显示他们在2016年第41周失踪,实际上它只是在“周”栏中输入错误。

有没有办法将说明列中的数据与周列进行比较,以查看该周列出的值是否为同一周?我遇到的问题是描述中的第1至第9周是单个数字(1,2,3 ......),但在周列中它们总是两位数(01,02,03 ... )。由于会计团队出于某种原因使用此格式,因此更改数据是不可行的。

2 个答案:

答案 0 :(得分:1)

description列获取年份和周的一种方法是:

SELECT Description,
       RIGHT(Description,4) [Year], 
       SUBSTRING(Description,8,CHARINDEX(',',Description)-8) [Week]
FROM dbo.YourTable

如果你需要为它加前缀0,那么:

SELECT Description, [Year], RIGHT('0'+[Week],2) [Week]
FROM (
SELECT Description,
       RIGHT(Description,4) [Year], 
       SUBSTRING(Description,8,CHARINDEX(',',Description)-8) [Week]
FROM dbo.YourTable) X;

答案 1 :(得分:0)

  

有没有办法将描述栏中的数据与周比较   列,以查看该周列出的值是否为同一周

SELECT t.* FROM table AS t INNER JOIN tables AS d ON t.description LIKE 'ROY WK ' + d.week +'%'

本质上,这个select语句将自己进行自我连接,寻找所有描述,例如ROY WK 41通配符。由于用户手指粗壮,这可能会导致误报。