SQL. Как привести дату в строку в нужный формат в SQL Server
На выходе получается дату в строковом виде в нужном формате.
Что еще посмотреть по SQL Server
Falcon Space
Это снижение стоимости владения
за счет меньшего количества людей для поддержки и узкого стека разработки. Про снижение стоимости владения продуктом
Это быстрое внесение изменений
Это простой удобный интерфейс
адаптация под мобильные устройства. Про юзабилити платформы
Нужна бесплатная консультация?
Получить оценку проекта
Создайте концепцию проекта на основе нашего шаблона и получите оценку проекта в виде КП.
Демо-сайт решений
Базисные решения, которые можно гибко адаптировать под себя: менять внешний вид, бизнес-логику и даже структуру базы данных.
Как поменять формат даты в sql
← →
Chuvi ( 2002-08-06 11:46 ) [0]
Как в SQL сервере изменит формат системной даты или заставить его пользоваться настройками даты Windows .
← →
3JIA9I CyKA ( 2002-08-06 11:49 ) [1]
Сударь!
Формат даты на SQL сервере не изменить. Вы ещё спросите, как изменить формат VARCHAR.
← →
AlexSam ( 2002-08-06 11:54 ) [2]
SET DATEFORMAT (для MSSQL)
Читай Books Online.
Насчет системной даты ты что-то загнул.
← →
Chuvi ( 2002-08-06 12:05 ) [3]
Смотрите в чем проблема .
Есть 2 совершенно одинаковых SQL сервера , сервер1 и сервер2 .
С сервера 1 сделали экспорт данных на сервер 2 .
На обоих компах системные настройки даты идентичны .
Запускаю прогу со своего компа и конекчусь к серверу1, выбираю данные за 3 июля , все нормально .
Конекчусь к серверу2 выбираю данные за 3 июля он мне выдает данные за 7 марта , в чем проблема .
← →
kserg@ukr.net ( 2002-08-06 12:15 ) [4]
В свое время тоже сталкнулся с необходимостью изменить формат даты на сервере. Умные люди сказали, что это чревато боком и нужный формат ставится сразу при инсталяции сервера.
Поэтому сейчас я пользуюсь след.приемом: сразу после коннекта с БД из приложения выполняю команду установки пользовательского формата даты — всё нормально работает.
.
quTemp1.SQL.Clear;
quTemp1.SQL.Add(«SET DATEFORMAT dmy»);
quTemp1.ExecSQL;
← →
Chuvi ( 2002-08-06 12:17 ) [5]
Кстати вы зря говорите что формат изменить нельзя .
Надо было больше книжек читать , умных :))))
А меняется он путем внесения изменений в системные таблицы .
Так же можно внести изменения в формат VARCHAR , СУДАРЬ :)))
← →
Chuvi ( 2002-08-06 12:19 ) [6]
kserg@ukr.net спасибо тебе за ответ, я бы с радостью так и зделал но представь что я немогу внести изменения в код программы :((
← →
SergSuper ( 2002-08-06 12:30 ) [7]
🙂
Формат даты в SQL сервере един и его не изменить! Читайте книжки, хелпы и т.д.
datetime and smalldatetime
Date and time data types for representing date and time of day.
Remarks
Values with the datetime data type are stored internally by Microsoft SQL Server as two 4-byte integers. The first 4 bytes store the number of days before or after the base date, January 1, 1900. The base date is the system reference date. Values for datetime earlier than January 1, 1753, are not permitted. The other 4 bytes store the time of day represented as the number of milliseconds after midnight.
The smalldatetime data type stores dates and times of day with less precision than datetime. SQL Server stores smalldatetime values as two 2-byte integers. The first 2 bytes store the number of days after January 1, 1900. The other 2 bytes store the number of minutes since midnight. Dates range from January 1, 1900, through June 6, 2079, with accuracy to the minute.
← →
Chuvi ( 2002-08-06 12:36 ) [8]
SergSuper .
Для каждой базы существуют таблицs где хранятся данные по настройки данной базы, и ты хочеш сказать что там нельзя изменить что идет сначала дни или месяцы .
Я неимел ввиду что можно изменить максимальное значение для INTEGER , но то про что я спрашивал изначально изменить точно можно . :))
И если не трудно мне хотелось узнать как это сделать , точнее что измениь в системной таблице ??
← →
3JIA9I CyKA ( 2002-08-06 12:40 ) [9]
>>И если не трудно мне хотелось узнать как это сделать , точнее что измениь в системной таблице ??
Ты хочешь узнать то, что ты уже прочитал в большом количестве «умных книжек» ?!
Круто.
← →
Chuvi ( 2002-08-06 12:46 ) [10]
ДА :)))
Я хочу узнать то о чем я читал, что это возможно поточнее и поподробнее :))))
← →
Chuvi ( 2002-08-06 12:48 ) [11]
Там где я читал было написанно что snj возможно сделать но небыло описанно что нужно какие значения нужно изменить в системной таблице что бы решить именно мою проблему , к сожелению :)))
← →
AlexSam ( 2002-08-06 12:48 ) [12]
А попробуй в Query Analyzer след. запрос
set dateformat dmy
go
SELECT * FROM table
where [date]=»03/06/02″
Будет правильно выдавать?
← →
Chuvi ( 2002-08-06 13:06 ) [13]
AlexSam
Не работает почемуто . :((
Ошибок не выдает , а данные не выводит !!
← →
MOA ( 2002-08-06 13:12 ) [14]
2 Chuvi © (06.08.02 12:05)
На мой взгляд, дело не в сервере, а в клиентах. Вы подключаетесь к серверу1 и серверу2 каким образом? Сервер1 к серверу2? Скорее всего, в SQL клиенте на Вашей машине и том сервере, который импортировал — разные установки «использовать национальные настройки» у клиентов.
Удачи!
← →
Chuvi ( 2002-08-06 13:28 ) [15]
MOAЯ подключаюсь к разным серверам путем изменения в алиасе BDE имени сервера сервер1 на сервер 2, когда стоит сервер 1 все работает, а когда сервер 2 нет .
Настройки самих серверов и windows на которых установлены SQL сервер1 и сервер 2 абсолютно идентичны .
← →
MOA ( 2002-08-06 13:38 ) [16]
2 Chuvi © (06.08.02 13:28)
>Настройки самих серверов и windows на которых установлены SQL сервер1 и сервер 2 абсолютно идентичны
При импорте (или экспорте — смотря кто был инициатором этого процесса), сервер-инициатор связывается с партнёром при помощи клентской части. Если у сервера-инициатора клиент настроен как «русский», а на рабочей станции — как «американский», то сервер-инциаторор будет рассматривать 03/07/99 как 3 июля, а рабочая станция — как 7 марта. Или наоборот.
← →
Chuvi ( 2002-08-06 13:44 ) [17]
Щас попробую спасибо MOA 🙂
← →
Chuvi ( 2002-08-06 14:01 ) [18]
MOA
Подскажи пожалуста, как мне у моего сервера изменить настройки на русские, потому что на том сервере с каторого я импортирую настройки Русские
← →
MOA ( 2002-08-06 14:12 ) [19]
Chuvi © (06.08.02 14:01)
Вызываете «Client Network Utiliti», на вкладке «Параметры DB-библиотеки» галочка «использовать национальный настройки». Необходимо, чтобы эта галочка была одинаковая на сервере-инициаторе и клиенте. Причём, если у вас SQL 7 лучше всего её сбросить, т.е. не использовать — наступал на эти грабли. А вот с 2000 у меня, например, стоит.
Да, и необходимо помнить, что те данные на сервере2, которые Вы импортировали могут оказаться неверными (сервер-инициатор неверно интерпретировал даты).
Удачи!
← →
Chuvi ( 2002-08-06 14:14 ) [20]
Да но есть еще одна загвосточка, сервер1 = 7 а сервер2 = 2000
Может подкажеш как лучше данные импортировать ??
← →
MOA ( 2002-08-06 14:14 ) [21]
2 сам себе
>одинаковая на сервере-инициаторе и клиенте — «клиенте» — я имел в виду, на рабочей станции, конечно же.
← →
Chuvi ( 2002-08-06 14:16 ) [22]
Огромное тебе спасибо MOA 🙂
А у тебя нет аси ? 🙂
← →
MOA ( 2002-08-06 14:22 ) [23]
Chuvi © (06.08.02 14:14)
В такой конфигурации лучше всего создать на 2000 сервере DTS пакет для импорта. DTS заточен специально под подобные задачи, очень удобен, здорово настраивается. Дополнительный бонус — можно настроить DTS для периодического импорта. Да и 2000 знает про существование и особенности 7, но не наоборот.
Удачи!
← →
Chuvi ( 2002-08-06 14:28 ) [24]
Еще раз спасибо 🙂
← →
MOA ( 2002-08-06 14:48 ) [25]
Chuvi © (06.08.02 14:28)
Рад помочь. Аська есть, но запускаю её крайне редко — лучше общаться мылом. Это вот сейчас начальство дало время закачать SP3 — вот он и качается.
Удачи!
FORMAT (Transact-SQL)
Возвращает значение в указанных формате и культуре (не обязательно). Для выполнения форматирования значения даты, времени и чисел с учетом локали в виде строк используется функция FORMAT. Для общих преобразований типов данных продолжайте использовать CAST и CONVERT.
Синтаксис
FORMAT( value, format [, culture ] )
Сведения о синтаксисе Transact-SQL для SQL Server 2014 (12.x) и более ранних версиях см . в документации по предыдущим версиям.
Аргументы
значение
Выражение поддерживаемого типа данных для форматирования. Список допустимых типов см. в таблице в последующем разделе «Примечания».
format
Шаблон формата nvarchar.
Аргумент format должен содержать допустимую строку формата .NET Framework в виде стандартной строки формата (например, «C» или «D») либо в виде шаблона пользовательских символов, обозначающих даты и числовые значения (например, «ММММ ДД, гггг (дддд)»). Составное форматирование не поддерживается. Полные сведения об этих шаблонах форматирования приведены в разделах документации по .NET Framework, посвященных форматированию строк в целом, пользовательским форматам даты и времени, а также пользовательским форматам чисел. Хорошей отправной точкой является раздел Типы форматирования.
Язык и региональные параметры
Необязательный аргумент nvarchar, обозначающий язык и региональные параметры.
Если аргумент culture не указан, то используется язык текущего сеанса. Язык может быть задан неявно или явно с использованием инструкции SET LANGUAGE. язык и региональные параметры, поддерживаемые платформа .NET Framework в качестве аргумента, не ограничиваются языками, явно поддерживаемыми SQL Server. Если аргумент culture недопустим, то FORMAT выдаст ошибку.
Типы возвращаемых данных
nvarchar или NULL
Длина возвращаемого значения определяется аргументом format.
Замечания
Функция FORMAT возвращает значение NULL для ошибок, когда culture не является valid. Например, NULL возвращается, если значение, заданное в format, недопустимо.
Функция FORMAT не детерминирована.
Функция FORMAT предполагает наличие среды выполнения CLR платформы .NET Framework.
Эта функция не может работать удаленно, так как возможность ее работы зависит от наличия среды CLR. Удаленный вызов функции, требующей наличия среды CLR, может привести к ошибке на удаленном сервере.
Функция FORMAT использует правила форматирования среды CLR, согласно которым двоеточия и точки должны экранироваться. Поэтому когда строка форматирования (второй параметр) содержит двоеточие или точку, они должны быть экранированы обратной косой чертой, если входное значение (первый параметр) имеет тип данных time. См. пример Г. Использование функции FORMAT с типами данных времени.
В приведенной ниже таблице перечислены приемлемые типы данных для аргумента value, а также содержатся сведения об их сопоставлении с эквивалентными типами .NET Framework.
| Категория | Тип | Тип .NET |
|---|---|---|
| Числовое | bigint | Int64 |
| Числовое | INT | Int32 |
| Числовое | smallint | Int16 |
| Числовое | tinyint | Байт |
| Числовое | десятичное | SqlDecimal |
| Числовое | numeric | SqlDecimal |
| Числовое | с плавающей запятой | Двойной |
| Числовое | real | Одна |
| Числовое | smallmoney | Decimal |
| Числовое | money | Decimal |
| Дата и время | Дата | Дата/время |
| Дата и время | время | TimeSpan |
| Дата и время | datetime | Дата/время |
| Дата и время | smalldatetime | Дата/время |
| Дата и время | datetime2 | Дата/время |
| Дата и время | datetimeoffset | DateTimeOffset |
Примеры
А. Простой пример функции FORMAT
В следующем примере возвращается простой набор данных, отформатированный для различных языков и региональных параметров.
DECLARE @d DATE = '11/22/2020'; SELECT FORMAT( @d, 'd', 'en-US' ) 'US English' ,FORMAT( @d, 'd', 'en-gb' ) 'British English' ,FORMAT( @d, 'd', 'de-de' ) 'German' ,FORMAT( @d, 'd', 'zh-cn' ) 'Chinese Simplified (PRC)'; SELECT FORMAT( @d, 'D', 'en-US' ) 'US English' ,FORMAT( @d, 'D', 'en-gb' ) 'British English' ,FORMAT( @d, 'D', 'de-de' ) 'German' ,FORMAT( @d, 'D', 'zh-cn' ) 'Chinese Simplified (PRC)';
US English British English German Simplified Chinese (PRC) ---------- --------------------- ---------- ------------------------ 11/22/2020 22/11/2020 22.11.2020 2020/11/22 US English British English German Chinese (Simplified PRC) --------------------------- ---------------------- -------------------------- --------------------------------------- Sunday, November 22, 2020 22 November 2020 Sonntag, 22. November 2020 2020年11月22日
B. Функция FORMAT с пользовательскими строками форматирования
В следующем примере показано форматирование числовых значений с помощью заданного пользовательского формата. В примере предполагается, что текущая дата — 22 ноября 2020 г. Дополнительные сведения об этих и других пользовательских форматах см. в статье Пользовательские строки форматирования чисел.
DECLARE @d DATE = GETDATE(); SELECT FORMAT( @d, 'dd/MM/yyyy', 'en-US' ) AS 'Date' ,FORMAT(123456789,'###-##-####') AS 'Custom Number';
Date Custom Number ---------- ------------- 22/11/2020 123-45-6789
C. Функция FORMAT с числовыми типами
В следующем примере возвращается 5 строк из таблицы Sales.CurrencyRate в базе данных AdventureWorks2022. Столбец EndOfDateRate в таблице хранится как тип money. В этом примере столбец возвращается неформатированным, затем форматируется в формате .NET Number, формате типа General и Currency. Дополнительные сведения об этих и других числовых форматах см. в статье Стандартные строки форматирования чисел.
SELECT TOP(5) CurrencyRateID, EndOfDayRate ,FORMAT(EndOfDayRate, 'N', 'en-us') AS 'Numeric Format' ,FORMAT(EndOfDayRate, 'G', 'en-us') AS 'General Format' ,FORMAT(EndOfDayRate, 'C', 'en-us') AS 'Currency Format' FROM Sales.CurrencyRate ORDER BY CurrencyRateID;
CurrencyRateID EndOfDayRate Numeric Format General Format Currency Format -------------- ------------ -------------- -------------- --------------- 1 1.0002 1.00 1.0002 $1.00 2 1.55 1.55 1.5500 $1.55 3 1.9419 1.94 1.9419 $1.94 4 1.4683 1.47 1.4683 $1.47 5 8.2784 8.28 8.2784 $8.28
Этот пример задает немецкий язык и региональные параметры (de-de).
SELECT TOP(5) CurrencyRateID, EndOfDayRate ,FORMAT(EndOfDayRate, 'N', 'de-de') AS 'Numeric Format' ,FORMAT(EndOfDayRate, 'G', 'de-de') AS 'General Format' ,FORMAT(EndOfDayRate, 'C', 'de-de') AS 'Currency Format' FROM Sales.CurrencyRate ORDER BY CurrencyRateID;
CurrencyRateID EndOfDayRate Numeric Format General Format Currency Format -------------- ------------ -------------- -------------- --------------- 1 1.0002 1,00 1,0002 1,00 € 2 1.55 1,55 1,5500 1,55 € 3 1.9419 1,94 1,9419 1,94 € 4 1.4683 1,47 1,4683 1,47 € 5 8.2784 8,28 8,2784 8,28 €
D. Использование функции FORMAT с типами данных времени
В этих случаях функция FORMAT возвращает значение NULL, так как символы . и : не экранированы.
SELECT FORMAT(cast('07:35' as time), N'hh.mm'); --> returns NULL SELECT FORMAT(cast('07:35' as time), N'hh:mm'); --> returns NULL
Функция FORMAT возвращает форматированную строку, так как символы . и : экранированы.
SELECT FORMAT(cast('07:35' as time), N'hh\.mm'); --> returns 07.35 SELECT FORMAT(cast('07:35' as time), N'hh\:mm'); --> returns 07:35
Формат возвращает текущее время в формате с AM или PM
SELECT FORMAT(SYSDATETIME(), N'hh:mm tt'); -- returns 03:46 PM SELECT FORMAT(SYSDATETIME(), N'hh:mm t'); -- returns 03:46 P
Формат возвращает заданное время с AM
select FORMAT(CAST('2018-01-01 01:00' AS datetime2), N'hh:mm tt') -- returns 01:00 AM select FORMAT(CAST('2018-01-01 01:00' AS datetime2), N'hh:mm t') -- returns 01:00 A
Формат возвращает заданное время с PM
select FORMAT(CAST('2018-01-01 14:00' AS datetime2), N'hh:mm tt') -- returns 02:00 PM select FORMAT(CAST('2018-01-01 14:00' AS datetime2), N'hh:mm t') -- returns 02:00 P
Формат возвращает заданное время в 24-часовом формате
select FORMAT(CAST('2018-01-01 14:00' AS datetime2), N'HH:mm') -- returns 14:00
См. также
- CAST и CONVERT (Transact-SQL)
- STR (Transact-SQL)
- Строковые функции (Transact-SQL)
MYSQL функции форматирования даты и времени
Теперь дата выглядит для нас привычно. Для задания формата даты используются специальные определители. Для удобства перечислим их в таблице.
SELECT DATE_FORMAT(CURDATE(), ‘%a’);
SELECT DATE_FORMAT(CURDATE(), ‘%b’);
SELECT DATE_FORMAT(CURDATE(), ‘%с’);
SELECT DATE_FORMAT(CURDATE(), ‘%d’);
SELECT DATE_FORMAT(CURDATE(), ‘%D’);
SELECT DATE_FORMAT(CURDATE(), ‘%e’);
SELECT DATE_FORMAT(‘2011-04-15 23:03:20’, ‘%H’);
SELECT DATE_FORMAT(‘2011-04-15 23:03:20’, ‘%h’);
SELECT DATE_FORMAT(‘2011-04-15 23:03:20’, ‘%i’);
SELECT DATE_FORMAT(‘2011-04-15 23:03:20’, ‘%j’);
SELECT DATE_FORMAT(‘2011-12-31 01:03:20’, ‘%k’);
SELECT DATE_FORMAT(‘2011-04-15 00:03:20’, ‘%l’);
SELECT DATE_FORMAT(‘2011-04-15 00:03:20’, ‘%M’);
SELECT DATE_FORMAT(‘2011-04-15 00:03:20’, ‘%M’);
SELECT DATE_FORMAT(‘2011-04-15 00:03:20’, ‘%m’);
SELECT DATE_FORMAT(‘2011-04-15 00:03:20’, ‘%p’);
SELECT DATE_FORMAT(‘2011-04-15 00:03:20’, ‘%r’);
SELECT DATE_FORMAT(‘2011-04-15 00:03:20’, ‘%s’);
SELECT DATE_FORMAT(‘2011-04-15 21:03:20’, ‘%T’);
SELECT DATE_FORMAT(‘2011-04-17 21:03:20’, ‘%u’);
SELECT DATE_FORMAT(‘2011-04-17 21:03:20’, ‘%U’);
SELECT DATE_FORMAT(‘2011-04-17 21:03:20’, ‘%W’);
SELECT DATE_FORMAT(‘2011-04-17 21:03:20’, ‘%w’);
SELECT DATE_FORMAT(‘2011-04-17 21:03:20’, ‘%Y’);
SELECT DATE_FORMAT(‘2011-04-17 21:03:20’, ‘%y’);
SELECT STR_TO_DATE(‘17.04.2011 23:50’, ‘%d.%m.%Y %H:%i’);
SELECT TIME_FORMAT(’22:38:15′, ‘%H-%i-%s’);
EUR — европейский стандарт
USA — американский стандарт
JIS — японский индустриальный стандарт
ISO — стандарт ISO (международная организация стандартов)
INTERNAL — интернациональный стандарт
Эту функцию хорошо использовать совместно с предыдущей — DATE_FORMAT(). Посмотрим на примере:
SELECT GET_FORMAT(DATE, ‘EUR’), DATE_FORMAT(‘2011-04-17’, GET_FORMAT(DATE, ‘EUR’));
Научись программировать на Python прямо сейчас!
- Научись программировать на Python прямо сейчас
- Бесплатный курс
Если этот сайт оказался вам полезен, пожалуйста, посмотрите другие наши статьи и разделы.
