Why does SQL LEN function return '1' for a

2019-02-26 03:53发布

问题:

Simple question - why when I print the value of the @len variable in the query below would I be getting the value 1, instead of 12 (the number of characters in the specified string)?

DECLARE @string varchar
DECLARE @index int
DECLARE @len int
DECLARE @char char(1)
SET @string = 'content loop'
SET @index = 1
SET @len= LEN(@string)

print @len

回答1:

Your declaration of @string is wrong. You have no length on the varchar.

Try this:

declare @string varchar(255);   -- or whatever

You just learned that the default in this situation is 1.

This is clearly specified in the documentation. As a further note, MS SQL seems to make this rather complicated:

When n is not specified in a data definition or variable declaration statement, the default length is 1. When n is not specified when using the CAST and CONVERT functions, the default length is 30.

The right habit is to always include the length when using varchar or nvarchar.



回答2:

You need to give the variable @string an actual length. Print the variable @string and it will probably return 'C'.



回答3:

Becvause varChar without a length specification is taken as varChar(1)

replace varchar with varChar(30) or varChar(max)