sql >> Databasteknik >  >> RDS >> Sqlserver

T-SQL-strängfunktioner:skillnad mellan att använda vänster/höger och delsträng och konstigt beteende

Du har efterföljande utrymmen

RIGHT kommer att ge mellanslag men LEN ignorerar efterföljande mellanslag

DECLARE @foo varchar(100)
SET @foo = 'abc12345def   ' --3 spaces

--right or substring
SELECT RIGHT(@foo, 3)
SELECT SUBSTRING(@foo, LEN(@foo)-2, LEN(@foo))

--demonstrate you get spaces
SELECT REPLACE(RIGHT(@foo, 3), ' ', 'z') --single space

--length differences
SELECT LEN(@foo), DATALENGTH(@foo)

--solution
SELECT RIGHT(RTRIM(@foo), 3)
--or trim your column values before storing

Se SET ANSI_PADDING

Obs:du gör inte få NULL för icke NULL-inmatning...

--only NULL if you send in NULL
SELECT RIGHT(NULL, 3)



  1. Hur man ändrar text till gemener i SQL

  2. Hur kan jag försäkra mig om att två rader som väljs slumpmässigt skiljer sig från varandra?

  3. Varför körs PHP snabbare än MySQL

  4. Problem med heredoc och PHP