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

Proč cast/konvertovat z int vrátí hvězdičku

Pro ještě větší zábavu vyzkoušejte tento:

DECLARE @i INT
SET @i = 100
SELECT CAST(@i AS VARCHAR(2)) -- result: '*'
go

DECLARE @i INT
SET @i = 100
SELECT CAST(@i AS NVARCHAR(2)) -- result: Arithmetic overflow error

:)

Odpověď na váš dotaz je:"Historické důvody"

Datové typy INT a VARCHAR jsou starší než BIGINT a NVARCHAR. Hodně starší. Ve skutečnosti jsou v originálu Specifikace SQL. Starší je také přístup potlačující výjimky nahrazující výstup hvězdičkami.

Později se lidé z SQL rozhodli, že vyvolání chyby je lepší/konzistentnější atd. než nahrazování falešných (a obvykle matoucích) výstupních řetězců. Kvůli konzistenci si však zachovaly předchozí chování pro již existující kombinace datových typů (aby nedošlo k porušení stávajícího kódu).

Takže (mnohem) později, když byly přidány datové typy BIGINT a NVARCHAR, získaly nové chování, protože se na ně nevztahovalo výše uvedené zachování původního stavu.



  1. Jak resetovat/změnit heslo roota MySql příkazového řádku v ubuntu linux

  2. Jak používat kruhovou datovou strukturu ve funkcích okna

  3. SQLite - Vyberte Data

  4. Jak uniknout apostrofu (') v MySql?