Проверка данных в sql - PullRequest
0 голосов
/ 23 мая 2011

Мне нужно проверить столбец с временными диапазонами, такими как «8:00 - 9:00 вечера». Мне нужно разделить этот столбец на два и обновить в моей таблице дату с текущей датой, но время из диапазона дляпример "2011-05-23 08:00:00" и "2011-05-23 21:00:00" для записи диапазона.любезно помогите.Также мне нужно обработать, если данные «8:00 - 21:00», «8:00 - 9:00» или «8:00 - 12:00».Если нет «-», необходимо отклонить данные для записи.

Ответы [ 2 ]

1 голос
/ 23 мая 2011

Вот базовое решение, которое, я думаю, вполне может быть использовано в качестве отправной точки:

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
0 голосов
/ 23 мая 2011

это может быть реализовано с помощью триггера.Используйте 24-часовой формат времени, чтобы избежать работы с AM / PM.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...