SQL DateTime вставлен неправильно из VB.NET - PullRequest
0 голосов
/ 10 мая 2019

Есть таблица, в которую я записываю информацию из программы .NET.

Простота приложения VB.NET определяет формат строки DATETIME, как показано ниже

responsedt = Date.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")

Затем я передаю это в оператор INSERT, который обновляет мою таблицу, однако, несмотря на то, что вся настройка SQL Server - en-GB (британский английский), DateTime имеет следующий формат:

2019-09-05 19:09:34.823

Это было сделано вчера, поэтому на самом деле должно быть

2019-05-09 19:09:34.823

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

FORMAT (xa.daterequested, 'yyyy-dd-MM HH:MM:ss.fff', 'en-gb')

Как, хотя это работает в операторе SELECT, оно не работает, когда я выполняю инструкцию UPDATE.

Не идеально обновлять даты всех записей после первоначальной ВСТАВКИ, поэтому решение проблемы стороны .NET или SQL будет восприниматься как марионетка.

1 Ответ

0 голосов
/ 10 мая 2019

У вас есть 2 варианта, чтобы предотвратить повторение ошибки:

  1. Сохранять даты как типы данных даты / времени вместо преобразования их в строки.
  2. Используйте форматы, которые не являютсяязык или настройки зависят.В SQL Server это будет ГГГГММДД чч: мм: сс.мссс ИЛИ ГГГГ-ММ-ДДтч: мм: сс.мсс (обратите внимание на T между датой и временем)

Чтобы исправить уже введенные даты, вы можете использовать коды формата в функции CONVERT.

UPDATE t SET
    daterequested = STUFF( STUFF( StringDate, 5, 0, SUBSTRING(StringDate,7,2)), 9, 2, '')
FROM YourTable t
CROSS APPLY( SELECT CONVERT( varchar(25), '20190905 19:09:34.823', 121)  AS StringDate) AS x;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...