【发布时间】:2021-10-27 13:46:38
【问题描述】:
我需要创建一个包含 ascii 控制键的表(代码范围在 0 到 31 之间)。
我的第一次尝试:
CREATE TABLE control_characters(
n int,
[character] varchar(1)
);
WITH cte AS (
SELECT 0 AS n, CAST(0 AS varchar(1)) AS c
UNION ALL
SELECT n+1 AS n, CAST(n+1 AS varchar(1)) AS c
FROM cte
WHERE n<=30
)
INSERT INTO control_characters(n, [character])
SELECT n,c FROM cte;
SELECT * FROM control_characters;
SELECT CAST(cc.[character] AS int) AS pb, s.*
FROM file_extract_staging s
CROSS JOIN control_characters cc
WHERE CHARINDEX(cc.[character], s.absolute_path_unique) != 0
【问题讨论】:
-
当您拥有
varchar(1)时,您如何期望 10 及以上的数字适合它? 10 有 2 个字符,'1'和'0'。或者你真的想要CHAR(n),而不是varchar,其值为n(例如'10')? -
我的最终目标是检测包含文件系统绝对文件路径的列中的控制字符
-
CHARINDEX 的第一个参数可以是 int 吗?我不想在绝对文件系统路径中检测“3”,我想用 ascii 代码 3 检测特殊字符。
-
"CHARINDEX 的第一个参数可以是 int" 可以,但是会隐式转换为字符表达式。所以
100将被隐式转换为'100'。 -
这就是我不想要的
标签: sql sql-server ascii charindex control-characters