我想为chars a创建一个小的cte。但是,如果我对递归部分使用char()-function,如下所示:
with cte(chars)
as (
select cast('a' as char) as chars
union all
select char(ascii(chars) + 1 ) from cte
where chars < 'z'
)
select *
from cte即使tho ()返回char(1),数据类型也不匹配。但是,如果char()-function被抛到char(1),那么它运行得非常好:
with cte(chars)
as (
select cast('a' as char) as chars
union all
select cast(char(ascii(chars) + 1 ) as char) from cte
where chars < 'z'
)
select *
from cte我是不是遗漏了什么?
发布于 2017-11-01 11:30:47
在Server中,不要在没有长度的情况下使用char() (和相关类型)。默认长度因上下文而异--谁想要跟踪这些事情呢?
以下工作:
with cte(chars) as (
select cast('a' as char(1)) as chars
union all
select char(ascii(chars) + 1 ) from cte
where chars < 'z'
)
select *
from cte;换句话说,char()在cast()中的默认长度与declare中的默认长度不同。
https://stackoverflow.com/questions/47053771
复制相似问题