CTE 不适用于反转字符串
CTE not working for reversing a string
我正在使用 sql 服务器 2008 R2,目前我正在学习 SQL。最近我尝试使用 CTE 来反转字符串,但出现错误 -
递归查询 "Val" 的锚点和递归部分之间的类型不匹配 "CTE"
我正在使用下面提到的代码 -
declare @string varchar(10) = 'mystring'
with cte as (
select right(@string,1) as val, len(@string) as ln
union all
select val + substring(@string,ln-1,1),ln-1
where ln > 0
)
select * from cte
有人能告诉我我做错了什么为什么我得到类型不匹配错误
如果你只想反转字符串,那么使用:
DECLARE @string VARCHAR(10) = 'mystring'
SELECT REVERSE(@string)
试试这个:
DECLARE @string VARCHAR(10) = 'mystring';
WITH cte ( val, ln )
AS ( SELECT CAST(RIGHT(@string, 1) AS NVARCHAR(MAX)) AS val ,
LEN(@string) AS ln
UNION ALL
SELECT val + SUBSTRING(@string, ln - 1, 1) ,
ln - 1
FROM cte
WHERE ln > 0
)
SELECT *
FROM cte
或者
DECLARE @string VARCHAR(MAX) = N'mystring';
WITH cte ( val, ln )
AS ( SELECT RIGHT(@string, 1) AS val ,
LEN(@string) AS ln
UNION ALL
SELECT val + SUBSTRING(@string, ln - 1, 1) ,
ln - 1
FROM cte
WHERE ln > 0
)
SELECT *
FROM cte
问题是 VARCHAR(10)
它的类型与表达式 val + SUBSTRING(@string, ln - 1, 1)
的类型不匹配,即 VARCHAR(1)
、VARCHAR(2)
...
当使用 VARCHAR(MAX)
时 val + SUBSTRING(@string, ln - 1, 1)
的类型也是 VARCHAR(MAX)
我正在使用 sql 服务器 2008 R2,目前我正在学习 SQL。最近我尝试使用 CTE 来反转字符串,但出现错误 -
递归查询 "Val" 的锚点和递归部分之间的类型不匹配 "CTE"
我正在使用下面提到的代码 -
declare @string varchar(10) = 'mystring'
with cte as (
select right(@string,1) as val, len(@string) as ln
union all
select val + substring(@string,ln-1,1),ln-1
where ln > 0
)
select * from cte
有人能告诉我我做错了什么为什么我得到类型不匹配错误
如果你只想反转字符串,那么使用:
DECLARE @string VARCHAR(10) = 'mystring'
SELECT REVERSE(@string)
试试这个:
DECLARE @string VARCHAR(10) = 'mystring';
WITH cte ( val, ln )
AS ( SELECT CAST(RIGHT(@string, 1) AS NVARCHAR(MAX)) AS val ,
LEN(@string) AS ln
UNION ALL
SELECT val + SUBSTRING(@string, ln - 1, 1) ,
ln - 1
FROM cte
WHERE ln > 0
)
SELECT *
FROM cte
或者
DECLARE @string VARCHAR(MAX) = N'mystring';
WITH cte ( val, ln )
AS ( SELECT RIGHT(@string, 1) AS val ,
LEN(@string) AS ln
UNION ALL
SELECT val + SUBSTRING(@string, ln - 1, 1) ,
ln - 1
FROM cte
WHERE ln > 0
)
SELECT *
FROM cte
问题是 VARCHAR(10)
它的类型与表达式 val + SUBSTRING(@string, ln - 1, 1)
的类型不匹配,即 VARCHAR(1)
、VARCHAR(2)
...
当使用 VARCHAR(MAX)
时 val + SUBSTRING(@string, ln - 1, 1)
的类型也是 VARCHAR(MAX)