在sql中是否可以识别字母数字键?如何对其执行操作?

在sql中是否可以识别字母数字键?如何对其执行操作?,sql,sql-server,Sql,Sql Server,我需要为我的一个客户端的SQL数据库编写一个节点js服务。表的主键如下:1,2,…9,A,B,…Y,Z,10,11,…19,1A,1B 现在我有两个主键,我想读取它们之间的所有行。这不起作用: SELECT COUNT(*) FROM CustomerMaster WHERE CustomerID BETWEEN 0001G AND 0002B 数据库使用SQL Express。CustomerID是CustomerMaster的主键。这是一个销售点软件的专有数据库,所以我不能对数据库进行任何

我需要为我的一个客户端的SQL数据库编写一个节点js服务。表的主键如下:1,2,…9,A,B,…Y,Z,10,11,…19,1A,1B

现在我有两个主键,我想读取它们之间的所有行。这不起作用:

SELECT COUNT(*) FROM CustomerMaster WHERE CustomerID BETWEEN 0001G AND 0002B

数据库使用SQL Express。CustomerID是CustomerMaster的主键。这是一个销售点软件的专有数据库,所以我不能对数据库进行任何更改。有什么方法可以读取两个主键之间的行吗?

您的主键看起来像字符串。字符串常量应以单引号分隔:

SELECT COUNT(*)
FROM CustomerMaster
WHERE CustomerID BETWEEN '0001G' AND '0002B'

用前导零填充您的id,并使用其右侧部分,例如将“1G”转换为“0001G”。然后比较:

SELECT COUNT(*) 
FROM CustomerMaster 
WHERE right('00000' + CustomerID, 5) BETWEEN '0001G' AND '0002B';

@里希亚格:这让我很惊讶。事实上,DBMS应该把“1H”比作“002B”,因为“1H”用“1”和“002B”开始,只有0。“这不起作用”通常不是很有帮助。当您遇到语法错误时,为什么不直接告诉我们而不是让我们猜测呢?用前导零填充数据会更好,您所做的是不可取的,并且会导致错误performance@t-克劳森:没错,但我阅读了请求,因此数据库就是这样,不能更改(一些系统正在写入数据并生成这些ID)。