[英]Using Like operator in SQL Server does 'Ename like '[A-Z]%' and 'Ename like '[a-z]%' mean same?
[英]SQL Server: Column with 100 rows organized by repeating A-Z?
我希望创建一个有 100 行的表,第一列由字母 AZ 组织,并一直重复到 100。我最接近的是:
有一个数字列,然后使用 ASCII 值将数字转换为字母,但这涉及首先创建数字列,然后让字母列依赖于此,或者
我已经能够创建单个列,但是当我尝试打印整个表格时,它显示为 AAAA、BBBB、CCCC、DDDD 等。
我需要该列完全独立,这就是解决方案 #1 不起作用的原因,而且我找不到正确排序或组织解决方案 #2 的方法,使其成为 A、B、C 而不是它的方式现在打印。 上下文截图:
我一直在使用此代码来创建表:
SELECT n
FROM (VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) t(n)
)
SELECT n1.n + n10.n * 10 as col
INTO dbo.table1
FROM nums n1
CROSS JOIN nums n10;
然后对于解决方案1,我试过这个:
ALTER TABLE numbers
ADD letters AS CHAR(num % 26 + 65);
SELECT * FROM numbers
ORDER BY num;
对于解决方案 2,这个:
ALTER TABLE table1
ALTER COLUMN col VARCHAR(3);
UPDATE table1
SET col = col % 26 + 65;
UPDATE table1
SET col = CHAR(col);
SELECT * FROM table1
ORDER BY col;
我已经在这里呆了几个小时,在两种解决方案中尝试不同的方法来获得答案。
提前致谢。
如果要重复循环生成字母,可以使用递归 CTE:
with cte as (
select convert(varchar(max), 'A') as letter, 1 as n
union all
select (case when letter < 'Z' then convert(varchar(max), char(ascii(letter) + 1)) else 'A' end),
n + 1
from cte
where n < 100
)
select letter
from cte;
您可以使用insert
或select into
将值放入表中。
如果您想要超过 100 行,则需要添加option (maxrecursion 0)
。
表中的行没有特定的顺序。 即使该表指定了聚集索引。 这样的概念在关系数据库中不存在。 为了确保特定的值顺序,您需要在 SELECT 语句中使用 ORDER BY 子句强制它。 考虑到这一点,以下代码必须让您了解如何实现您的解决方案:
With nums as (
SELECT n
FROM (VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) t(n)
),
numbers as (
SELECT n1.n + n10.n * 10 as num
FROM nums n1
CROSS JOIN nums n10
)
select num, char(num/26 + 65) + CHAR(num % 26 + 65)
from numbers
order by num
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.