Я сейчас использую
Convert(varchar, Getdate(), 101)
Чтобы вставить только часть даты системной даты в одну из таблиц базы данных сервера sql. у меня вопрос: правильно ли это сделать или есть какой-нибудь другой способ лучше?
1 ответ
Я не понимаю, почему вы конвертируете вывод GETDATE()
(который уже является DATETIME
) в VARCHAR
, а затем SQL Server преобразует его обратно в DATETIME
при вставке это снова.
Просто используйте:
INSERT INTO dbo.YourTable(SomeDateTimeColumn)
VALUES(GETDATE())
Если вы делаете это преобразование, чтобы избавиться от временной части DATETIME
, вам лучше:
- используйте тип данных
DATE
(доступен в SQL Server 2008 и новее) для хранения толькоDATE
(некогда) если вы используете SQL Server 2005 или более раннюю версию, используйте вместо этого это преобразование - оно должно быть намного эффективнее, чем два преобразования!
INSERT INTO dbo.YourTable(SomeDateTimeColumn) VALUES(DATEADD(dd, DATEDIFF(dd, 0, GETDATE()), 0))
Обновление: было проведено некоторое тестирование производительности, и в этом конкретном случае кажется, что объем работы, который должен выполнить SQL Server, действительно одинаков - независимо от того, используете ли вы convert to varchar удаляет время и возвращается к подходу datetime , который у вас уже есть, или используете ли вы мой подход get the number of days from date 0 . В конце концов, похоже, это не имеет значения.
Однако ЛУЧШЕЕ решение все равно будет: если вам все равно нужна только дата - используйте столбец типа DATE
(в SQL Server 2008 strong> и новее) и избавьтесь от любых преобразований или манипуляций с выводом GETDATE()
в целом.
Похожие вопросы
Новые вопросы
sql-server
Microsoft SQL Server — это система управления реляционными базами данных (RDBMS). Используйте этот тег для всех выпусков Microsoft SQL Server, включая Compact, Express, Azure, Fast-track, APS (ранее PDW) и Azure SQL DW. Не используйте этот тег для других типов СУБД (MySQL, PostgreSQL, Oracle и т. д.). Не используйте этот тег для вопросов по программному обеспечению и разработке мобильных устройств, если только он не связан напрямую с базой данных.
GETDATE()
вVARCHAR
, когда столбецSMSDate
уже являетсяDATETIME
???? Не имеет никакого смысла .....GETDATE()
- это ужеDATETIME
- абсолютно нет необходимости и никакой выгоды в преобразовании этого вvarchar
(и SQL Server преобразует его обратно вDATETIME
при вставке ....)