Стандартизация дат в SQL.Арифметическое переполнение - PullRequest
1 голос
/ 20 января 2012

У меня есть строковое поле dob, у которого есть даты рождения в различных форматах, например,

д.р.

1 июля 1945
1967-1-7
13 мая 1956 года

8 мая 1947
27 сентября 1953 года
1952-3-25

Я пытался использовать MS SQL 2005 для создания стандартизированного поля даты

select convert(datetime,dob,103)
from myTable

Я получаю арифметическое переполнение, которое, похоже, связано с последним значением, предположительно потому, что оно пытается преобразовать 25 в месяц, когда это день я пытался установка языка на британский и другие стили без успеха

Есть предложения?

1 Ответ

1 голос
/ 20 января 2012

Почему вы пытаетесь сохранить его в заданном формате? Можете ли вы не просто сохранить его как тип datetime? Самым большим преимуществом его хранения в независимой от языка локализации является то, что вы можете перенести логику представления в пользовательский интерфейс, к которому она относится. Кроме того, вы можете избежать беспорядочных ситуаций, когда у вас DOB 3-4-5 (2003 г., 5 апреля, 4 марта 2005 г., 3 апреля 2005 г.).

Преобразование в дату и время прекрасно работает для меня (язык США).

; with myTable (dob)as
(
    select 'July 1, 1945'
    UNION ALL SELECT '1967-1-7'
    UNION ALL SELECT '13 May 1956'
    UNION ALL SELECT '8 may 1947'
    UNION ALL SELECT '27 september 1953'
    UNION ALL SELECT '1952-3-25'
)
SELECT
    cast(T.dob AS datetime) AS real_datetime
,   T.dob
FROM
    myTable T

Результаты

real_datetime   dob
1945-07-01 00:00:00.000 July 1, 1945
1967-01-07 00:00:00.000 1967-1-7
1956-05-13 00:00:00.000 13 May 1956
1947-05-08 00:00:00.000 8 may 1947
1953-09-27 00:00:00.000 27 september 1953
1952-03-25 00:00:00.000 1952-3-25
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...