sql >> Databáze >  >> RDS >> Sqlserver

CONVERT() v SQL Server

V SQL Server, CONVERT() funkce převede výraz jednoho datového typu na jiný.

Zde je rychlý přehled funkce s příklady.

Syntaxe

Syntaxe vypadá takto:

CONVERT ( data_type [ ( length ) ] , expression [ , style ] ) 

Kde expression je výraz, který se má převést, data_type je nový datový typ a length je volitelná délka pro nový datový typ.

Volitelný style argument lze použít k určení, jak má funkce přeložit expression argument. Tento argument můžete například použít k určení formátu data.

Příklad

Zde je příklad převodu řetězce na desítkové:

SELECT CONVERT(DECIMAL(5,2), '007');

Výsledek:

7.00

Řetězec k datu

Zde je příklad seslání řetězce na datum:

SELECT CONVERT(date, '09 Feb 2030');

Výsledek:

2030-02-09

V tomto případě CONVERT() funkce byla schopna určit, které části data jsou které, protože jsem poskytl datum ve formátu, který rozpoznává.

Předání hodnoty, kterou nelze přetypovat jako datum, způsobí chybu:

SELECT CONVERT(date, 'My Birthday');

Výsledek:

Msg 241, Level 16, State 1, Line 1
Conversion failed when converting date and/or time from character string.

Místní prostředí

Jazyk aktuální relace může ovlivnit způsob interpretace dat.

Při použití britského jazyka se stane toto:

SET LANGUAGE British;
SELECT CONVERT(date, '09/02/2030');

Výsledek:

2030-02-09

V tomto případě bylo datum interpretováno jako devátý únorový den.

Změňme jazyk na us_English :

SET LANGUAGE us_English;
SELECT CONVERT(date, '09/02/2030');

Výsledek:

2030-09-02

Tentokrát to datum interpretovalo jako druhý den září.

style Argument

Můžeme použít volitelný style argument k určení, jak má být výraz přeložen.

Příklad:

SET LANGUAGE British;
SELECT 
    CONVERT(date, '09/02/2030') AS "British",
    CONVERT(date, '09/02/2030', 101) AS "US",
    CONVERT(date, '09/02/30', 1) AS "US (short)",
    CONVERT(date, '20300902', 112) AS "ISO",
    CONVERT(date, '09.02.2030', 104) AS "German";

Výsledek:

+------------+------------+--------------+------------+------------+
| British    | US         | US (short)   | ISO        | German     |
|------------+------------+--------------+------------+------------|
| 2030-02-09 | 2030-09-02 | 2030-09-02   | 2030-09-02 | 2030-02-09 |
+------------+------------+--------------+------------+------------+

Zřetězení řetězců

Zde je příklad přetypování číselné hodnoty do řetězce za účelem zřetězení hodnoty s řetězcem:

SELECT 'Age: ' + CONVERT(varchar(10), 27);

Výsledek:

Age: 27

Pokud jej nejprve nepřevedeme, stane se toto:

SELECT 'Age: ' + 27;

Výsledek:

Msg 245, Level 16, State 1, Line 1
Conversion failed when converting the varchar value 'Age: ' to data type int.

Při pokusu o zřetězení dvou hodnot s různými datovými typy musí SQL Server implicitně převést jednu z hodnot, aby používala datový typ druhé, aby byly obě stejného datového typu, než může provést zřetězení. Při provádění této konverze se řídí pravidly priority datových typů.

V SQL Server, int datový typ má vyšší prioritu než varchar .

Proto se ve výše uvedeném příkladu SQL Server pokouší převést řetězec na celé číslo, ale to se nezdaří, protože řetězec nelze převést na celé číslo.

Zkrácení textu

Jeden šikovný malý trik, který můžeme provést pomocí CONVERT() funkcí je zkrátit delší řetězce na čitelnější délku.

Zde je příklad zkrácení textu vybraného z databázové tabulky:

SELECT
    ProductName,
    CONVERT(varchar(20), ProductName) AS Truncated
FROM Products;

Výsledek:

+---------------------------------+----------------------+
| ProductName                     | Truncated            |
|---------------------------------+----------------------|
| Left handed screwdriver         | Left handed screwdri |
| Long Weight (blue)              | Long Weight (blue)   |
| Long Weight (green)             | Long Weight (green)  |
| Sledge Hammer                   | Sledge Hammer        |
| Chainsaw                        | Chainsaw             |
| Straw Dog Box                   | Straw Dog Box        |
| Bottomless Coffee Mugs (4 Pack) | Bottomless Coffee Mu |
| Right handed screwdriver        | Right handed screwdr |
+---------------------------------+----------------------+

Další informace

CONVERT() funkce funguje podobným způsobem jako CAST() a pomocí kterékoli z nich lze provést mnoho převodů dat. To znamená, že mezi nimi existují rozdíly.

Viz dokumentaci společnosti Microsoft pro CAST() a CONVERT() pro podrobnější informace o používání této funkce.


  1. Žádné mapování dialektu pro typ JDBC:1111

  2. „0000-00-00 00:00:00“ nelze reprezentovat jako java.sql. Chyba časového razítka

  3. Tipy pro ukládání záloh TimescaleDB v cloudu

  4. Výběr databázového proxy pro MySQL a MariaDB