sql中的数据验证

时间:2011-05-23 09:10:07

标签: sql sql-server-2008 validation

我需要验证一个时间范围为'上午8:00 - 晚上9:00'的列我需要将此列拆分为两列并使用当前日期的日期更新到我的表格,但是时间范围是示例“2011-05-23 08:00:00”和“2011-05-23 21:00:00”为范围记录。善意的帮助。如果数据是'上午8点 - 下午9点','上午8点 - 下午9点'或'上午8点 - 中午12点',我还需要处理。如果没有“ - ”则需要拒绝记录的数据。

2 个答案:

答案 0 :(得分:1)

这是一个基本的解决方案,我认为,它可以作为一个起点:

DECLARE @Today datetime = CAST(GETDATE() AS date);

WITH datasource (TimeRange) AS (
  SELECT '10 a.m. - 1 p.m.' UNION ALL
  SELECT '8 am - 12 noon' UNION ALL
  SELECT '12 noon - 4 p.m.' UNION ALL
  SELECT '9 - 10 am' UNION ALL
  SELECT '10 am 1 pm'
),
HyphensIncluded AS (
  SELECT *, HyphenPos = CHARINDEX('-', TimeRange)
  FROM datasource
  WHERE CHARINDEX('-', TimeRange) > 0
),
Split AS (
  SELECT
    *,
    StartTimeStr = REPLACE(
      REPLACE(
        LTRIM(RTRIM(SUBSTRING(TimeRange, 0, HyphenPos))),
        '.',
        ''
      ),
      'noon',
      'pm'
    ),
    EndTimeStr = REPLACE(
      REPLACE(
        LTRIM(SUBSTRING(TimeRange, HyphenPos + 1, LEN(TimeRange) - HyphenPos)),
        '.',
        ''
      ),
      'noon',
      'pm'
    )
  FROM HyphensIncluded
),
Validated AS (
  SELECT *
  FROM Split
  WHERE ISDATE(StartTimeStr) = 1
    AND ISDATE(EndTimeStr) = 1
)
SELECT
  StartTimestamp = @Today + StartTimeStr,
  EndTimestamp   = @Today + EndTimeStr
FROM Validated

输出:

StartTimestamp          EndTimestamp
----------------------- -----------------------
2011-05-23 10:00:00.000 2011-05-23 13:00:00.000
2011-05-23 08:00:00.000 2011-05-23 12:00:00.000
2011-05-23 12:00:00.000 2011-05-23 16:00:00.000

答案 1 :(得分:0)

可以使用触发器实现。使用24小时时间格式以避免处理AM / PM。