Вы можете использовать CONVERT()
для управления форматом даты и указать меньшую целевую строку для обрезки результата:
SELECT CONVERT(NVARCHAR(10), GETDATE(), 21) -- YYYY-MM-DD
SELECT CONVERT(NVARCHAR(10), GETDATE(), 102) -- YYYY.MM.DD
SELECT CONVERT(NVARCHAR(10), GETDATE(), 105) -- DD-MM-YYYY
SELECT CONVERT(NVARCHAR(10), GETDATE(), 110) -- MM-DD-YYYY
SELECT CONVERT(NVARCHAR(5), GETDATE(), 105) -- DD-MM
SELECT CONVERT(NVARCHAR(5), GETDATE(), 110) -- MM-DD
SELECT CONVERT(NVARCHAR(4), GETDATE(), 102) -- YYYY
-- To get YYYY-DD-MM, put two of the above together:
SELECT CONVERT(NVARCHAR(4), GETDATE(), 102)
+ '-' + CONVERT(NVARCHAR(5), GETDATE(), 105)
Чтобы принудительно вставить формат даты для вставки, вы можете сделать аналогичную вещь:
-- Insert in Italian dd-mm-yy (e.g. 10th February 2012)
INSERT INTO user_table VALUES (CONVERT(DATETIME, '10-02-12', 5));
-- Insert in USA mm-dd-yy (2nd October 2012)
INSERT INTO user_table VALUES (CONVERT(DATETIME, '10-02-12', 10));
См. Справочник Microsoft MSDN CAST и CONVERT (Transact-SQL) .
---- ОТВЕТ НА ДОПОЛНИТЕЛЬНЫЙ ВОПРОС ----
Я считаю ваш последний комментарий немного двусмысленным.Если вы спрашиваете, как искать в поле datetime
между двумя датами, имеющимися в строковом формате, попробуйте что-то вроде этого:
SELECT *
FROM user_table
WHERE mydate BETWEEN convert(Datetime,'20/02/2012',103)
AND convert(Datetime,'01/03/2012')
, тогда как, если вы пытаетесь выполнить поиск поnvarchar
поле с двумя датами в строковом формате, затем попробуйте что-то вроде этого:
SELECT *
FROM user_table
WHERE convert(Datetime, mynvarchar, 103)
BETWEEN convert(Datetime,'20/02/2012',103)
AND convert(Datetime,'01/03/2012')
Однако это ужасно неэффективно.Если вы собираетесь много выполнять поиск по дате, я настоятельно рекомендую сохранить ваше поле даты в формате datetime.Если у вас есть бизнес-требования для хранения версии nvarchar, это нормально, но вы можете использовать динамические столбцы, такие как:
CREATE TABLE user_table
(
mynvarchar NVARCHAR(10), -- Date as a String in DD/MM/YYYY format
mydatetime AS CONVERT(DATETIME, mynvarchar, 103) PERSISTED
);
Преимуществом этого является то, что поле mydatetime
автоматически обновляется и может бытьиспользуется в индексах и ограничениях, если вы этого хотите, но вы можете управлять им, манипулируя бизнес-столбцами mynvarchar
.
В будущем, могу ли я попросить, чтобы, задавая вопрос, вы предоставили более конкретныйпримеры, то есть имя вашей таблицы, название ваших столбцов, так что мне не нужно их изобретать.