Как мне хранить только дату в MS SQL из VB? - PullRequest
0 голосов
/ 06 апреля 2009

Мой проект требует, чтобы я использовал VB (5 или 6) * для сохранения даты в базе данных SQL Server. Тип datetime SQL включает время, которое я не хочу. Мне также известно, что представление даты в VB не отражает SQL Server.

Итак, как я могу сохранить дату, хранящуюся в типе даты VB, в базе данных SQL, например, как время в полночь этой даты?

Редактировать: мне нужно использовать дату, чтобы выбрать строки дальше по строке, так что я не могу просто обрезать их при чтении.

* Я знаю, я был вами, вы бы не начали отсюда. Но учитывая ограничения, любой VB6 / MS SQL извергает там?

Ответы [ 6 ]

3 голосов
/ 06 апреля 2009

VB6 имеет функцию DateValue(), которая возвращает часть даты значения даты / времени, причем часть времени «обнуляется». (Примечание. Когда часть времени переменной даты / времени «обнуляется», время интерпретируется как 12:00 AM.)

2 голосов
/ 06 апреля 2009

SQL Server 2008 имеет новые типы данных даты и времени . Существует тип данных "Дата", если вы не хотите хранить компонент времени.

0 голосов
/ 07 апреля 2009

Я бы просто использовал DateSerial, чтобы создать нужную вам дату. Вы передаете ему год, месяц и день, и он дает вам дату с полуночью как временем. Затем вы можете использовать его для передачи в качестве параметра команде ADO или аналогичной. Когда вы прочитаете его, у него будет полночь, так что это не проблема. Мне нравится это лучше, чем DateValue, так как нет преобразования строк. Если вы действительно хотите, вы можете создать свою собственную функцию, такую ​​как DateValue, которая использует DateSerial.

Function JustTheDatePlease(ByVal dtSource As Date) As Date

   JustTheDatePlease = DateSerial(Year(dtSource), Month(dtSource), Day(dtSource))

End Function

Если по какой-то причине вы не используете параметризованные запросы, и у вас действительно должно быть для этого хорошее оправдание, вы можете использовать в своих запросах каноническую форму даты ODBC. Вы просто форматируете дату как {d 'yyyy-mm-dd'} например {d '2009-04-06'}.

0 голосов
/ 07 апреля 2009

В VB вы можете использовать функцию Date (), чтобы вернуть текущую дату без элемента времени.

Если вы используете объект параметра ADO с объектом Command, поставщик OLE DB должен обработать преобразование типа VB Date в значение DATETIME SQL Server.

В SQL Server (до SQL 2008 типа DATE) вы должны создать ограничение CHECK для столбца, чтобы гарантировать невозможность добавления даты с элементом времени (обратите внимание, что я использовал однозначный язык для безопасного мои литералы DATETIME) например

ALTER TABLE MyTable ADD
   vb_date DATETIME NOT NULL
   CONSTRAINT vb_date__no_time_element
      CHECK ((vb_date = DATEADD(DAY, DATEDIFF(DAY, '1990-01-01T00:00:00.000', vb_date), '1990-01-01T00:00:00.000')));
0 голосов
/ 06 апреля 2009

Попробуйте вставить и обновить дату следующим образом:

CAST(FLOOR(CAST(@DateTime AS float)) AS datetime)

У нас это есть в UDF, и оно в основном убирает часть времени из даты.

0 голосов
/ 06 апреля 2009

Используйте столбец DateTime и просто обрежьте время на уровне представления.

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