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

6 způsobů, jak zřetězit řetězec a číslo na serveru SQL

Pokud jste se někdy při používání SQL Serveru pokusili zřetězit řetězec s číslem, ale zobrazila se vám chyba, tento článek by vám měl vše objasnit. Existuje více než jeden způsob, jak provést zřetězení pomocí T-SQL na SQL Server, a pokud zřetězujete různé typy dat (jako řetězec a číslo), může se zobrazit chyba v závislosti na tom, jak zřetězení provedete.

Při zřetězení různých datových typů je třeba pamatovat na to, že je nejprve nutné převést na stejný datový typ. Přesněji řečeno, při zřetězení řetězce s číslem bude nutné číslo před zřetězením s řetězcem převést na řetězec. Naštěstí SQL Server/T-SQL to dělá hračkou.

Tento článek představuje šest způsobů, jak zřetězit řetězce s čísly pomocí T-SQL.

Funkce CONCAT()

Nejviditelnější (a možná nejlepší) způsob, jak zřetězit řetězec a číslo, je použít CONCAT() funkce. To vám umožní zadat řetězec a číslo jako dva samostatné argumenty. SQL Server je poté zřetězí a vaše zřetězení je dokončeno.

Příklad

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

Výsledek:

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

Jak vidíte, funguje to perfektně. Řetězec a číslo jsou uvedeny jako jedno pole.

Upozorňujeme, že nejste omezeni pouze na jeden řetězec a jedno číslo – CONCAT() funkce může přijmout až 254 argumentů (tj. můžete spojit až 254 řetězců/čísel.

Všimněte si také, že CONCAT() implicitně převede všechny argumenty na typy řetězců před zřetězením. Také CONCAT() implicitně převede jakékoli hodnoty null na prázdné řetězce.

Funkce CONCAT_WS()

Předchozí příklad můžeme posunout o krok dále pomocí CONCAT_WS() funkce. Tato funkce vám umožňuje určit oddělovač.

Chcete-li poskytnout oddělovač, jednoduše jej přidejte jako první argument. Poté zadejte řetězec a číslo jako druhý a třetí argument.

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

Výsledek:

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

Všimněte si, že tato funkce není nezbytně vhodná pro oddělování párů název/hodnota, protože oddělovač je přidán mezi každou jednotlivou položku, která je zřetězena (takže bude také přidán mezi každý pár v případě, že máte více párů). V našem případě to funguje dobře, protože máme pouze jeden pár jméno/hodnota ke zřetězení.

Vždy však můžete vnořit více CONCAT_WS() funkcí vrácení správného zřetězení pro vaše potřeby (takže můžete mít mezi každým párem jiný oddělovač).

Funkce CONVERT()

Pokud z nějakého důvodu nemůžete (nebo nechcete) použít CONCAT() nebo CONCAT_WS() funkcí, můžete provést zřetězení pomocí operátoru zřetězení řetězce (+ ). Když použijete tuto metodu, budete muset provést jakékoli převody datových typů ručně.

Jedním ze způsobů převodu mezi datovými typy je použití CONVERT() funkce.

Zde je návod, jak to provést pomocí stejných dat z předchozích příkladů:

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

Výsledek:

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

V tomto případě převedu celé číslo na varchar(12), ale může to být jakýkoli typ dat a délka, kterou požadujete.

Funkce CAST()

CAST() funkce je velmi podobná funkci CONVERT() funkce. Hlavní rozdíl je v tom, že CAST() je standardní ANSI a CONVERT() je specifický pro T-SQL. Poté, co řekl, CONVERT() má některé funkce navíc, ale pro účely těchto příkladů můžete použít kteroukoli z nich.

Zde je CAST() verze používající stejná data z předchozích příkladů:

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

Výsledek:

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

Funkce TRY_CONVERT()

Jeden potenciální problém při použití CONVERT() funkcí je, že pokud se převod nezdaří, dostanete chybu. I když je to v mnoha případech v pořádku, v některých případech to nemusí být žádoucí. V takových případech můžete najít TRY_CONVERT() vhodnější.

TRY_CONVERT() funkce převede datový typ stejně jako CONVERT() funkce ano. Pokud však data nelze převést, vrátí null .

Pokud se například pokusíme provést následující, zobrazí se chyba:

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

Výsledek:

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

Pokud však použijeme TRY_CONVERT() , dostaneme null :

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

Výsledek:

Result
------
null

V tomto případě můžete použít podmíněné programování k provedení jiného úkolu v závislosti na výsledku.

Funkce TRY_CAST()

 TRY_CAST() funkce funguje stejným způsobem. Převádí datový typ stejně jako CAST() funkce ano, a pokud data nelze převést, vrátí null .

Například to vyvolá chybu:

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

Výsledek:

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

Ale pokud použijeme TRY_CAST() místo toho dostaneme null :

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

Výsledek:

Result
------
null

  1. MyISAM versus InnoDB

  2. SQL Server Interní:Plán Caching Pt. II – Plány překompilování

  3. Aktualizujte prohlášení s vnitřním spojením na Oracle

  4. Pomocí kroku Unpivot Step vytvořte tabulkovou tabulku z křížové tabulky