sql >> Databasteknik >  >> RDS >> Sqlserver

6 sätt att sammanfoga en sträng och ett nummer i SQL Server

Om du någonsin har försökt sammanfoga en sträng med ett nummer när du använder SQL Server, men fått ett felmeddelande, bör den här artikeln klargöra saker för dig. Det finns mer än ett sätt att utföra sammanlänkning med T-SQL i SQL Server, och om du sammanfogar olika datatyper (som en sträng och ett nummer) kan du få ett felmeddelande, beroende på hur du gör sammanlänkningen.

Det man bör komma ihåg när man sammanfogar olika datatyper är att de måste konverteras till samma datatyp först. Närmare bestämt, när en sträng sammanfogas med ett nummer, måste numret konverteras till en sträng innan det kan sammanfogas med strängen. Lyckligtvis gör SQL Server/T-SQL detta till en lek.

Den här artikeln presenterar sex sätt att sammanfoga strängar med siffror med hjälp av T-SQL.

CONCAT()-funktionen

Det mest uppenbara (och möjligen det bästa) sättet att sammanfoga en sträng och ett nummer är att använda CONCAT() fungera. Detta låter dig ange strängen och numret som två separata argument. SQL Server kommer sedan att sammanfoga dem, och din sammanlänkning är klar.

Exempel

SELECT CONCAT('Comments: ', 9) AS Result;

Resultat:

Result     
-----------
Comments: 9

Som du kan se fungerar detta perfekt. Strängen och numret presenteras som ett fält.

Observera att du inte är begränsad till bara en sträng och ett nummer – CONCAT() funktionen kan acceptera upp till 254 argument (dvs. du kan sammanfoga upp till 254 strängar/siffror.

Observera också att CONCAT() konverterar implicit alla argument till strängtyper före sammanlänkning. Dessutom CONCAT() konverterar implicit alla nollvärden till tomma strängar.

CONCAT_WS()-funktionen

Vi kan ta det föregående exemplet ett steg längre genom att använda CONCAT_WS() fungera. Denna funktion låter dig ange en separator.

För att tillhandahålla en separator, lägg bara till det som det första argumentet. Ange sedan strängen och numret som andra och tredje argument.

SELECT CONCAT_WS(': ', 'Comments', 9) AS Result;

Resultat:

Result     
-----------
Comments: 9

Observera att den här funktionen inte nödvändigtvis är lämplig för att separera namn/värdepar, eftersom separatorn läggs till mellan varje enskilt objekt som är sammanlänkade (så det kommer också att läggas till mellan varje par om du har flera par). I vårt fall fungerar det bra, eftersom vi bara har ett namn/värdepar att sammanfoga.

Du kan dock alltid kapsla flera CONCAT_WS() funktioner för att returnera rätt sammanlänkning för dina behov (så att du kan ha en annan separator mellan varje par).

Funktionen CONVERT()

Om du av någon anledning inte kan (eller inte vill) använda CONCAT() eller CONCAT_WS() funktioner, kan du utföra en sammanlänkning med strängsammansättningsoperatorn (+ ). När du använder den här metoden måste du utföra alla datatypkonverteringar manuellt.

Ett sätt att konvertera mellan datatyper är att använda CONVERT() funktion.

Så här gör du med samma data från de tidigare exemplen:

SELECT 'Comments: ' + CONVERT(varchar(12), 9) AS Result;

Resultat:

Result     
-----------
Comments: 9

I det här fallet konverterar jag heltal till varchar(12), men det kan vara vilken datatyp och längd du behöver.

CAST()-funktionen

CAST() funktionen är mycket lik CONVERT() fungera. Den största skillnaden är att CAST() är standard ANSI och CONVERT() är specifik för T-SQL. Med det sagt, CONVERT() har viss extra funktionalitet, men för dessa exempel kan du använda endera.

Här är CAST() version med samma data från de tidigare exemplen:

SELECT 'Comments: ' + CAST(9 AS varchar(12)) AS Result;

Resultat:

Result     
-----------
Comments: 9

TRY_CONVERT()-funktionen

Ett potentiellt problem när du använder CONVERT() Funktionen är att om konverteringen inte lyckas får du ett felmeddelande. Även om detta är bra i många fall, kanske det i vissa fall inte är önskvärt. I sådana fall kan du hitta TRY_CONVERT() mer lämplig.

TRY_CONVERT() funktionen konverterar datatypen precis som CONVERT() funktion gör. Men om data inte kan konverteras kommer den att returnera null .

Om vi ​​till exempel försöker göra följande får vi ett felmeddelande:

SELECT 'Comments: ' + CONVERT(varchar(1), 10.00) AS Result;

Resultat:

Error: Arithmetic overflow error converting numeric to data type varchar.

Men om vi använder TRY_CONVERT() , får vi null :

SELECT 'Comments: ' + TRY_CONVERT(varchar(1), 10.00) AS Result;

Resultat:

Result
------
null

Du kan använda villkorlig programmering i det här fallet för att utföra en annan uppgift beroende på resultatet.

TRY_CAST()-funktionen

Den TRY_CAST() funktionen fungerar på samma sätt. Den konverterar datatypen precis som CAST() funktionen gör det, och om data inte kan konverteras kommer den att returnera null .

Detta ger till exempel ett fel:

SELECT 'Comments: ' + CAST(10.00 AS varchar(1)) AS Result;

Resultat:

Error: Arithmetic overflow error converting numeric to data type varchar.

Men om vi använder TRY_CAST() istället får vi null :

SELECT 'Comments: ' + TRY_CAST(10.00 AS varchar(1)) AS Result;

Resultat:

Result
------
null

  1. Bindestreck i kolumnnamn i MySQL DB

  2. Varning:mysql_result() förväntar sig att parameter 1 är resurs, boolesk given

  3. Rails omfattning - var i exakta matchningar

  4. Vilka är mer presterande, CTE eller temporära tabeller?