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

Oprava „Konverze se nezdařila při převodu hodnoty varchar“ při pokusu o zřetězení v SQL Server

Pokud se při pokusu o provedení operace zřetězení v SQL Serveru zobrazí chybová zpráva „Konverze se nezdařila při převodu hodnoty varchar…, je pravděpodobné, že se pokoušíte zřetězit řetězec a číslo.

Pokud to uděláte, dojde k chybě, protože se SQL Server pokouší přidat řetězec a číslo namísto jejich zřetězení.

Chcete-li tento problém vyřešit, buď převeďte číslo na řetězec, nebo použijte funkci jako CONCAT() nebo CONCAT_WS() k provedení zřetězení.

Chyba

Zde je příklad kódu, který způsobuje chybu:

SELECT 'Player ' + 456;

Výsledek:

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

SQL Server si myslí, že se pokoušíme přidat dva operandy, a tak narazí na problém při pokusu o přidání řetězce a čísla.

Řešení 1

Jedním ze způsobů, jak tento problém vyřešit, je explicitně převést číslo na řetězec:

SELECT 'Player ' + CAST(456 AS varchar(3));

Výsledek:

Player 456

To způsobí, že SQL Server pochopí, že se snažíme operandy zřetězit, místo abychom je přidali.

Řešení 2

Dalším způsobem, jak to udělat, je použít funkci jako CONCAT() k provedení zřetězení:

SELECT CONCAT('Player ', 456);

Výsledek:

Player 456

CONCAT() je řetězcová funkce, a tak SQL Server nyní chápe, že chceme zřetězit dva řetězce namísto sčítání dvou čísel.

Alternativně bychom mohli použít CONCAT_WS() funkce, která nám umožňuje určit oddělovač, který se má použít mezi zřetězenými argumenty.


  1. Nejlépe 9 systémů pro správu databází pro šablony Joomla je

  2. Funkce NANVL() v Oracle

  3. SQL dotaz pro stromovou tabulku

  4. Nasazení MySQL, MariaDB, Percona Server, MongoDB nebo PostgreSQL – snadné s ClusterControl