Изменить строку даты SQL Server на другой формат - PullRequest
0 голосов
/ 18 мая 2018

Пожалуйста, прости меня за мой dunglish, я голландец.

У меня есть таблица, которая выглядит так:

CREATE TABLE [dbo].[WSLogons]
(
    [Date] [nchar](15) NULL,
    [Time] [nchar](15) NULL,
    [Username] [nchar](15) NULL,
    [Domain] [nchar](15) NULL,
    [Computer] [nchar](15) NULL,
    [HostComputerName] [nchar](15) NULL
) ON [PRIMARY]

Нет первичного ключа.

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

Это решено, но в моей базе данных у меня другая датаи форматы времени.и я запрашиваю функцию преобразования даты и времени.

Это не работает, потому что в некоторых строках у меня есть значения даты и времени, например:

5/18/2018       9:00 AM         
5/18/2018       8:28 AM   

, а в некоторых вправильно, как это

18-05-2018      14:52  

, как я уже говорил, я запрашиваю информацию с заказом по и преобразовать

order by CONVERT(date, Date, 105) desc 

Если в результатах указаны дата и время с нотацией США, Я получаю ошибку формата.

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

Я хотел бы получить хороший результат в запросе с этим оператором.

SELECT 
    CONVERT(date, [Date] ,101) as datum
    ,[Time]
    ,[Username]
    ,[Domain]
    ,[Computer]
    ,[HostComputerName]
FROM 
    [AuditLogons].[dbo].[WSLogons] 
WHERE
    date LIKE '%/%/%' 
    AND Time LIKE '%:% AM%' OR Time LIKE '%:% PM%'

Теперь столбец datum представлен как

2018-05-18  11:59 AM  
2018-05-18  1:25 PM 

Как мне отсюда обновить эти строки при форматировании даты, например 18-5-2018?

Если я пытаюсь преобразовать в

CONVERT(date, [Date], 105) 

, я тоже получаю сообщение об ошибке.

Надеюсь, вы понимаете мою проблему, и я надеюсь на некоторую помощь

Большое спасибо.Роджер

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

сначала добавьте столбец реальной даты в таблицу:

alter table dbo.WSLogons add realDate datetime;

, затем обновите его, указав правильные данные, например:

update dbo.WSLogons
set realDate = CONVERT(datetime, Date, 101)
where Date like '[0-9][0-9]/[0-9][0-9]/[0-9][0-9][0-9][0-9]'

для формата даты в дд / мм / гггг стиль для других форматов см. здесь

0 голосов
/ 18 мая 2018

Кажется, это работает, но основная проблема заключается в том, что правило номер один при разработке базы данных заключается в использовании соответствующих типов данных.Если вы можете изменить эти столбцы, сделайте это;если вы не можете, убедитесь, что вы проверяете свои данные.

DECLARE @WSLogons TABLE(
    [Date] [nchar](15) NULL,
    [Time] [nchar](15) NULL
)

INSERT INTO @WSLogons ([Date],[Time]) SELECT '5/18/2018','9:00 AM'
INSERT INTO @WSLogons ([Date],[Time]) SELECT '5/18/2018','09:00'

SELECT *
    ,CONVERT(datetime2, [Date] + ' ' + [Time]) as datum
FROM @WSLogons
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...