sql >> Database >  >> RDS >> Sqlserver

CONVERTEREN() in SQL Server

In SQL Server, de CONVERT() functie converteert een uitdrukking van het ene gegevenstype naar het andere.

Hier is een snel overzicht van de functie met voorbeelden.

Syntaxis

De syntaxis gaat als volgt:

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

Waar expression is de uitdrukking die moet worden geconverteerd, data_type is het nieuwe gegevenstype, en length is een optionele lengte voor het nieuwe gegevenstype.

De optionele style argument kan worden gebruikt om aan te geven hoe de functie de expression . moet vertalen argument. U kunt dit argument bijvoorbeeld gebruiken om het datumformaat te specificeren.

Voorbeeld

Hier is een voorbeeld van het converteren van een tekenreeks naar decimaal:

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

Resultaat:

7.00

String to Date

Hier is een voorbeeld van het casten van een string naar een datum:

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

Resultaat:

2030-02-09

In dit geval de CONVERT() functie was in staat om te bepalen welke datumdelen welke zijn, omdat ik de datum heb opgegeven in een formaat dat het herkent.

Het doorgeven van een waarde die niet als datum kan worden gegoten, resulteert in een fout:

SELECT CONVERT(date, 'My Birthday');

Resultaat:

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

Lokaal

De taal van de huidige sessie kan een verschil maken in de interpretatie van datums.

Dit is wat er gebeurt als je de Britse taal gebruikt:

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

Resultaat:

2030-02-09

In dit geval werd de datum geïnterpreteerd als de negende dag van februari.

Laten we de taal veranderen in us_English :

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

Resultaat:

2030-09-02

Deze keer interpreteerde het de datum als de tweede dag van september.

De style Argument

We kunnen de optionele style . gebruiken argument om aan te geven hoe de uitdrukking moet worden vertaald.

Voorbeeld:

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";

Resultaat:

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

Aaneenschakeling van tekenreeksen

Hier is een voorbeeld van het casten van een numerieke waarde naar een string om de waarde samen te voegen met een string:

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

Resultaat:

Age: 27

Dit is wat er gebeurt als we het niet eerst converteren:

SELECT 'Age: ' + 27;

Resultaat:

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

Wanneer u probeert twee waarden met verschillende gegevenstypen samen te voegen, moet SQL Server impliciet een van de waarden converteren om het gegevenstype van de andere te gebruiken, zodat ze allebei hetzelfde gegevenstype zijn voordat de aaneenschakeling kan worden uitgevoerd. Het volgt de regels van de voorrang van het gegevenstype om deze conversie uit te voeren.

In SQL Server is de int gegevenstype heeft een hogere prioriteit dan varchar .

Daarom probeert SQL Server in het bovenstaande voorbeeld de tekenreeks naar een geheel getal te converteren, maar dit mislukt omdat de tekenreeks niet kan worden geconverteerd naar een geheel getal.

Tekst afkappen

Een handige kleine truc die we kunnen uitvoeren met de CONVERT() functie is om langere strings af te kappen tot een beter leesbare lengte.

Hier is een voorbeeld van het afkappen van tekst die is geselecteerd uit een databasetabel:

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

Resultaat:

+---------------------------------+----------------------+
| 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 |
+---------------------------------+----------------------+

Meer informatie

De CONVERT() functie werkt op dezelfde manier als de CAST() functie, en met beide kunnen veel gegevensconversies worden uitgevoerd. Dat gezegd hebbende, er zijn verschillen tussen hen.

Zie de documentatie van Microsoft voor CAST() en CONVERT() voor meer gedetailleerde informatie over het gebruik van deze functie.


  1. Wat is MySQL-rijvolgorde voor SELECT * FROM table_name;?

  2. Meerdere SQL-query's in één instructie uitvoeren met PHP

  3. Gebruikersaccountbeheer, rollen, machtigingen, authenticatie PHP en MySQL - Deel 4

  4. 3 SQL Server-bewakingsvragen die u moet stellen bij het overnemen van een DBA-positie