如何处理SQL查询中的错误数据质量

时间:2017-05-26 11:22:54

标签: sql-server-2008 data-quality

下面的代码是一个包含温度的分组数据样本(请记住它在医院中的人体温度)。

显然数据很糟糕但想知道是否有可能以某种方式将这些数据转换为INT,因为我们有一个UOM(测量单位)字段,所以我们只需要这个数字。

数据问题:

88度显然是华氏温度而不是摄氏温度 3635将是36.35 .368将是36.8 37.3。将是37.3 .37.7将是37.7 377将是37.7 .3.8将是38

我认为任何其他变体都应该被排除在无效数据之外,因为无法准确地做出明智的假设。

DECLARE @Test TABLE (
    [Temperature] VARCHAR(500),
    [Count] VARCHAR(50)
                 )
INSERT INTO @Test ([Temperature],[Count])
 VALUES 

('34.4                oC',' 9   '),
('36.02               oC',' 1   '),
('36.36               oC',' 3   '),
('36.5                oC',' 5593    '),
('36.5.               oC',' 1   '),
('36.6.               oC',' 2   '),
('36.74               oC',' 2   '),
('36.82               oC',' 2   '),
('37.36               oC',' 2   '),
('37.49               oC',' 4   '),
('40                  oC',' 1   '),
('88                  oC',' 1   '),
('        3635                  oC','   1   '),
('  .368              oC',' 1   '),
('33.5                oC',' 1   '),
('35.2                oC',' 84  '),
('35.20               oC',' 1   '),
('35.99               oC',' 1   '),
('36.35               oC',' 2   '),
('37.3.               oC',' 1   '),
('39.5                oC',' 5   '),
('86                  oC',' 1   '),
('         356                  oC','   12  '),
('         364                  oC','   72  '),
('         379                  oC','   9   '),
('         385                  oC','   2   '),
('        3535                  oC','   1   '),
('  .37.7             oC',' 1   '),
('35.5                oC',' 290 '),
('35.87               oC',' 1   '),
('36..6               oC',' 1   '),
('36.25               oC',' 2   '),
('36.45               oC',' 2   '),
('36.62               oC',' 2   '),
('36.68               oC',' 5   '),
('36.8.               oC',' 2   '),
('37.03               oC',' 5   '),
('37.1                oC',' 3610    '),
('37.16               oC',' 3   '),
('37.2      oCC000715799',' 1   '),
('37.27               oC',' 2   '),
('37.91               oC',' 1   '),
('38.9                oC',' 28  '),
('63.5                oC',' 1   '),
('71                  oC',' 1   '),
('         377                  oC','   8   '),
('               36.5 oC',' 1   '),
(' 3.4                oC',' 3   '),
(' 3.7                oC',' 3   '),
('36.59               oC',' 1   '),
('36.67               oC',' 5   '),
('37.13               oC',' 1   '),
('37.18               oC',' 1   '),
('37.24               oC',' 1   '),
('39.7                oC',' 5   '),
('76                  oC',' 2   '),
('80                  oC',' 2   '),
('         347                  oC','   1   '),
('         352                  oC','   2   '),
('         368                  oC','   64  '),
('        3602                  oC','   1   '),
('        3688                  oC','   1   '),
('  .36.4             oC',' 1   '),
('  .8                oC',' 1   '),
(' 3.2                oC',' 2   '),
('34.3                oC',' 5   '),
('34.9                oC',' 20  '),
('35                  oC',' 124 '),
('35.81               oC',' 1   '),
('36.17               oC',' 2   '),
('36.23               oC',' 1   '),
('36.37               oC',' 2   '),
('36.38               oC',' 4   '),
('36.42               oC',' 1   '),
('36.76               oC',' 2   '),
('37..2               oC',' 1   '),
('37.00               oC',' 4   '),
('37.07               oC',' 6   '),
('37.12               oC',' 2   '),
('37.2                oC',' 3151    '),
('37.48               oC',' 2   '),
('39.                 oC',' 1   '),
('39.2                oC',' 9   '),
('39.9                oC',' 2   '),
('         370                  oC','   1   '),
('30.1                oC',' 1   '),
('34.1                oC',' 2   '),
('34.8                oC',' 17  '),
('35.43               oC',' 1   '),
('36..8               oC',' 2   '),
('36.05               oC',' 1   '),
('36.21               oC',' 4   '),
('36.31               oC',' 2   '),
('36.41               oC',' 1   '),
('36.58               oC',' 8   '),
('36.8                oC',' 8134    '),
('36.81               oC',' 3   '),
('36.88               oC',' 2   '),
('36.89               oC',' 2   '),
('36.99               oC',' 4   '),
('37.01               oC',' 6   '),
('37.14               oC',' 3   '),
('37.33               oC',' 1   '),
('37.37               oC',' 6   '),
('37.44               oC',' 1   '),
('37.59               oC',' 2   '),
('38.5                oC',' 85  '),
('39.4                oC',' 9   '),
('78                  oC',' 2   '),
('92                  oC',' 1   '),
('         361                  oC','   19  '),
('         383                  oC','   1   '),
('         391                  oC','   1   '),
('        3642                  oC','   1   '),
('        3699                  oC','   2   '),
('               37.6 oC',' 1   '),
('35.59               oC',' 1   '),
('35.69               oC',' 1   '),
('35.90               oC',' 1   '),
('36..9               oC',' 1   '),
('36.08               oC',' 2   '),
('36.27               oC',' 1   '),
('36.365              oC',' 1   '),
('36.51               oC',' 1   '),
('36.78               oC',' 4   '),
('36.84               oC',' 1   '),
('36.85               oC',' 3   '),
('36.97               oC',' 2   '),
('37.29               oC',' 1   '),
('37.3                oC',' 2306    '),
('37.8                oC',' 730 '),
('38.08               oC',' 1   '),
('38.4                oC',' 113 '),
('38.49               oC',' 1   '),
('38.7                oC',' 53  '),
('39.3                oC',' 10  '),
('70                  oC',' 2   '),
('         357                  oC','   5   '),
('         362                  oC','   49  '),
('         396.8                oC','   1   '),
('        3700                  oC','   1   '),
('        3752                  oC','   1   '),
('  .381              oC',' 1   '),
(' 0.37               oC',' 1   '),
(' 3.1                oC',' 1   '),
('14                  oC',' 1   '),
('27                  oC',' 1   '),
('34.2                oC',' 5   '),
('34.5                oC',' 22  '),
('35.9                oC',' 633 '),
('36.44               oC',' 2   '),
('36.57               oC',' 1   '),
('36.65               oC',' 1   '),
('36.66               oC',' 3   '),
('37.04               oC',' 7   '),
('65.9                oC',' 1   '),
('82                  oC',' 2   '),
('         118                  oC','   1   '),
('         358                  oC','   6   '),
('         381                  oC','   2   '),
('         396.6                oC','   1   '),
('        3704                  oC','   1   '),
('        3801                  oC','   1   '),
('      ',' 195340  '),
('                362 oC',' 1   '),
('  .374              oC',' 1   '),
(' 3.6                oC',' 3   '),
('26.5                oC',' 1   '),
('35.0                oC',' 28  '),
('35.79               oC',' 1   '),
('36..7               oC',' 1   '),
('36.00               oC',' 2   '),
('36.18               oC',' 1   '),
('36.48               oC',' 4   '),
('36.49               oC',' 3   '),
('37.19               oC',' 2   '),
('37.46               oC',' 1   '),
('37.9                oC',' 465 '),
('38.12               oC',' 1   '),
('39                  oC',' 25  '),
('         351                  oC','   2   '),
('         369.                 oC','   1   '),
('         389                  oC','   1   '),
('        3736                  oC','   1   '),
('  NULL    ',' 7   '),
('35.98               oC',' 1   '),
('36                  oC',' 2948    '),
('36.28               oC',' 1   '),
('36.69               oC',' 1   '),
('36.72               oC',' 2   '),
('36.77               oC',' 4   '),
('36.98               oC',' 7   '),
('37.05               oC',' 3   '),
('37.06               oC',' 2   '),
('37.15               oC',' 3   '),
('37.25               oC',' 5   '),
('37.26               oC',' 3   '),
('37.39               oC',' 3   '),
('37.42               oC',' 1   '),
('37.68               oC',' 3   '),
('38.3                oC',' 160 '),
('38.6.               oC',' 1   '),
('         376                  oC','   18  '),
('        3617                  oC','   1   '),
('        3703                  oC','   1   '),
(' 3.8                oC',' 2   '),
(' 7.6                oC',' 1   '),
('30.6                oC',' 1   '),
('34                  oC',' 3   '),
('34.7                oC',' 9   '),
('35.06               oC',' 1   '),
('35.7                oC',' 324 '),
('35.74               oC',' 1   '),
('36.01               oC',' 2   '),
('36.1                oC',' 1517    '),
('36.12               oC',' 1   '),
('36.4                oC',' 5001    '),
('36.6                oC',' 7044    '),
('36.79               oC',' 5   '),
('36.86               oC',' 1   '),
('36.90               oC',' 1   '),
('36.93               oC',' 1   '),
('37.30               oC',' 1   '),
('37.92               oC',' 1   '),
('38.                 oC',' 5   '),
('38.6                oC',' 65  '),
('38.8                oC',' 46  '),
('97                  oC',' 1   '),
('         354                  oC','   4   '),
('         355                  oC','   5   '),
('         365                  oC','   107 '),
('        3654                  oC','   1   '),
('35.8                oC',' 495 '),
('36.09               oC',' 6   '),
('36.2                oC',' 2526    '),
('36.3.               oC',' 1   '),
('36.47               oC',' 1   '),
('36.53               oC',' 2   '),
('36.9                oC',' 5449    '),
('37.0                oC',' 1209    '),
('37.1.               oC',' 1   '),
('37.32               oC',' 2   '),
('37.38               oC',' 5   '),
('37.45               oC',' 1   '),
('37.5                oC',' 1477    '),
('37.6                oC',' 1101    '),
('37.80               oC',' 1   '),
('38.1                oC',' 215 '),
('40.2                oC',' 1   '),
('62                  oC',' 1   '),
('         366                  oC','   61  '),
('         375                  oC','   28  '),
('16                  oC',' 1   '),
('34.0                oC',' 1   '),
('35.                 oC',' 3   '),
('35.1                oC',' 61  '),
('35.23               oC',' 1   '),
('35.58               oC',' 2   '),
('36.                 oC',' 59  '),
('36.03               oC',' 1   '),
('36.16               oC',' 2   '),
('36.94               oC',' 2   '),
('37.08               oC',' 7   '),
('37.21               oC',' 1   '),
('37.47               oC',' 1   '),
('39.8                oC',' 3   '),
('         346                  oC','   1   '),
('         353                  oC','   2   '),
('         369                  oC','   57  '),
('         374                  oC','   28  '),
('        3677                  oC','   1   '),
('               37.4 oC',' 1   '),
('34.6                oC',' 15  '),
('35.3                oC',' 74  '),
('35.4                oC',' 120 '),
('35.6                oC',' 320 '),
('36.06               oC',' 1   '),
('36.07               oC',' 2   '),
('36.14               oC',' 1   '),
('36.19               oC',' 1   '),
('36.54               oC',' 1   '),
('36.71               oC',' 1   '),
('36.92               oC',' 1   '),
('37.50               oC',' 1   '),
('37.54               oC',' 1   '),
('37.7                oC',' 836 '),
('39.0                oC',' 8   '),
('39.6                oC',' 3   '),
('60                  oC',' 1   '),
('         127                  oC','   1   '),
('         336.8                oC','   1   '),
('        1500                  oC','   1   '),
('               36.4 oC',' 1   '),
('36.0                oC',' 829 '),
('36.3                oC',' 3192    '),
('36.56               oC',' 3   '),
('36.63               oC',' 2   '),
('36.7                oC',' 6348    '),
('36.73               oC',' 3   '),
('36.96               oC',' 4   '),
('37.                 oC',' 64  '),
('37.4                oC',' 1861    '),
('37.69               oC',' 1   '),
('38.01               oC',' 1   '),
('93                  oC',' 1   '),
('         351.                 oC','   1   '),
('         371                  oC','   24  '),
('         372                  oC','   45  '),
('         373                  oC','   30  '),
('        3722                  oC','   1   '),
('  .3.8              oC',' 1   '),
('26.1                oC',' 1   '),
('35.97               oC',' 4   '),
('36.61               oC',' 3   '),
('37                  oC',' 4890    '),
('37.02               oC',' 3   '),
('37.66               oC',' 1   '),
('38                  oC',' 367 '),
('38.0                oC',' 72  '),
('38.2                oC',' 225 '),
('39.1                oC',' 22  '),
('         359                  oC','   14  '),
('         360                  oC','   3   '),
('         363                  oC','   49  '),
('         367                  oC','   112 '),
('         378                  oC','   8   ')


Select 

*
from @Test

2 个答案:

答案 0 :(得分:1)

我相信这会让你接近。

SELECT *, 
CASE
WHEN ISNUMERIC(REPLACE(REPLACE(REPLACE(Temperature, 'oC', ''), ' ', ''), '.', '')) = 1
THEN CONVERT(INT, (REPLACE(REPLACE(REPLACE(Temperature, 'oC', ''), ' ', ''), '.', '')))
ELSE NULL END AS TemperatureValue
FROM @Test

希望这可以帮助你。

答案 1 :(得分:1)

这个工作正常,但没有考虑我们保留的DQ问题,因为这是记录的

TRY_CAST(REPLACE(Temperature, 'oC', '') AS DECIMAL(19,8))