Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да зададете инвариантната култура, когато използвате FORMAT() в SQL Server

В SQL Server можете да използвате FORMAT() функция за форматиране на дата/час и числови стойности като низове. По-специално, функцията осигурява форматиране, съобразено с локали, а функцията приема аргумент „култура“, който ви позволява да посочите култура или език, който да използвате за действителния формат. Например, можете да подадете en-us за да се гарантира, че резултатите са форматирани в американски английски формат.

Аргументът култура не е задължителен, така че ако не го предоставите, изходът ще се определя от езика на текущата сесия.

FORMAT() функцията приема всяка култура, поддържана от .NET Framework като аргумент (не сте ограничени до езиците, изрично поддържани от SQL Server).

Една от културите, поддържани от .NET Framework, е инвариантната култура. Инвариантната култура е културно-нечувствителна. По-конкретно, тази култура е свързана с английския език, но не и с която и да е държава/регион.

За да посочите това FORMAT() трябва да изведе резултатите с помощта на инвариантната култура, просто използвайте "iv" за аргумента култура (третият аргумент).

Пример 1 – Валута

Ето пример за форматиране на стойност като валута с помощта на инвариантната култура.

ИЗБЕРЕТЕ ФОРМАТ(123, 'C', 'iv') Резултат;

Резултати:

+---------+| Резултат ||----------|| ¤123,00 |+----------+

Това води до изхода с дробна част с десетичен знак. Към него също се добавя знакът за валута (¤), който се използва за обозначаване на неопределена валута (това е Unicode символ U+00A4).

Пример 2 – Дата

Ето пример за форматиране на дата с помощта на инвариантната култура заедно с кратък формат за дата.

DECLARE @date date ='2030-05-25';ИЗБЕРЕТЕ ФОРМАТ(@date, 'd', 'iv') Резултат;

Резултати:

+-----------+| Резултат ||-----------|| 25.05.2030 г. |+-----------+

Краткият формат на датата за инвариантната култура е ММ/дд/гггг.

Ето го отново, но този път го сравнявам с американската английска, британска и немска (немецка) култура.

DECLARE @date date ='2030-05-25';ИЗБЕРЕТЕ ФОРМАТ(@date, 'd', 'iv') 'Invariant Culture', FORMAT(@date, 'd', 'en-us') „американски английски“, FORMAT(@date, 'd', 'en-gb') 'британски', FORMAT(@date, 'd', 'de-de') 'немски (Deutsch)';

Резултати:

+---------------------+--------------+-------- ---+-------------------+| Инвариантна култура | американски английски | Британски | немски (немски) ||---------------------+--------------+------- -----+--------------------|| 25.05.2030 г. | 25.05.2030 г. | 25/05/2030 | 25.05.2030 г. |+---------------------+--------------+-------- ----+-------------------+

Пример 3 – Всички стандартни формати за дата и час

Ето още един, използващ инвариантната култура, но този път форматирам datetimeoffset стойност, използвайки всички стандартни низове за формат на дата и час, поддържани от .NET Framework.

DECLARE @date datetimeoffset, @culture char(2); SET @date ='2030-05-25 23:59:30.1234567 +07:00';SET @culture ='iv';ИЗБЕРЕТЕ ФОРМАТ(@date, 'd', @culture) КАТО 'd', FORMAT(@ дата, 'D', @culture) КАТО 'D', FORMAT(@date, 'f', @culture) КАТО 'f', FORMAT(@date, 'F', @culture) КАТО 'F', FORMAT( @date, 'g', @culture) КАТО 'g', FORMAT(@date, 'G', @culture) КАТО 'G', FORMAT(@date, 'm', @culture) КАТО 'm', FORMAT (@date, 'M', @culture) КАТО 'M', FORMAT(@date, 'o', @culture) КАТО 'o', FORMAT(@date, 'O', @culture) КАТО 'O', FORMAT(@date, 'r', @culture) КАТО 'r', FORMAT(@date, 'R', @culture) КАТО 'R', FORMAT(@date, 's', @culture) КАТО 's' , FORMAT(@date, 't', @culture) КАТО 't', FORMAT(@date, 'T', @culture) КАТО 'T', FORMAT(@date, 'u', @culture) КАТО 'u ', FORMAT(@date, 'U', @culture) КАТО 'U', FORMAT(@date, 'y', @culture) КАТО 'y', FORMAT(@date, 'Y', @culture) КАТО ' Y';

Резултат (с помощта на вертикален изход):

<пред>г | 25.05.2030 г. | събота, 25 май 2030 г. | Събота, 25 май 2030 г., 23:59 F | Събота, 25 май 2030 г. 23:59:30 г | 25.05.2030 г. 23:59G | 25.05.2030 г. 23:59:30 ч. | 25 май | 25 май | 2030-05-25T23:59:30.1234567+07:00O | 2030-05-25T23:59:30.1234567+07:00r | Събота, 25 май 2030 г., 16:59:30 GMTR | Събота, 25 май 2030 г., 16:59:30 GMTs | 2030-05-25T23:59:30t | 23:59 ч. | 23:59:30 часа | 25.05.2030 16:59:30ZU | NULLy | май 2030 г. | 2030 май

Инвариантната култура не работи във вашата система?

Ако не можете да накарате инвариантната култура да работи във вашата система, това може да се дължи на инсталирана по-стара версия на .NET Framework. Документацията за .NET Framework 4.8 изрично посочва, че инвариантната култура е достъпна с помощта на нейния двубуквен код по ISO 639-1 "iv" .

Въпреки това, на този въпрос за препълване на стека, отговорът от Соломон Руцки предполага, че това може да е било достъпно само от .NET 4.5.

Ако не можете да го накарате да работи с по-ранна версия на .NET, опитайте да надстроите до най-новата версия (или версия от поне 4.5).


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Преобразувайте името на месеца в номер на месеца в SQL Server

  2. Как да добавите ИЛИ пуснете колона от таблица с активиран CDC, без да губите данни в базата данни на SQL Server - урок за SQL Server

  3. Как да използвате изявление за случай за условно форматиране в заявка за избор - SQL Server / TSQL урок, част 116

  4. Намерете стойност навсякъде в база данни

  5. Получаване на резултат от динамичен SQL в променлива за sql-сървър