sql - 使用 TSQL,我可以将 CHAR(1) 列递增 1 并在没有 CASE 语句的 LEFT OUTER JOIN 中使用它吗?

标签 sql sql-server database algorithm tsql

这个问题类似于我的last question .除了这次我使用字母而不是 6 位整数。我想找到乱序的“字母”。

假设我有以下数据:

id | Date | Letter
-----------------------------
01 | 5/1/2009 | X
02 | 5/1/2009 | Y
03 | 5/1/2009 | Z
04 | 5/1/2009 | A
05 | 5/1/2009 | B
06 | 5/1/2009 | D

我希望能够提出一个查询,告诉我在第 05 行和第 06 行之间应该有一行带有“C”的行。

在我的最后一个问题(使用 INT)中,我得到了类似于以下解决方案的东西,并且效果很好。

SELECT * from TABLE1 t1 
LEFT OUTER JOIN TABLE2 t2 ON t2.INTCol - 1 = t2.INTCol AND t1.date = t2.date
WHERE t2.id IS NULL

嗯,对于字母(据我所知)我不能说 (G - 1)。那么,还有其他方法可以做到这一点吗?

我使用的数据库是 SQL Server 2005。我相信在 PL/SQL 中有一个使用 TRANSLATE 的简单解决方案,但我不认为我可以像使用 TSQL 那样做任何事情。

最佳答案

您可以使用以下方法将 char(1) 转换为它的 ascii 数字

ASCII(Letter)

然后您可以将其递增 1 并使用 CHAR(如有必要)将其返回到一个字母,因此您的代码将是这样的:

SELECT * from TABLE1 t1 
LEFT OUTER JOIN TABLE2 t2 
      ON ASCII(t1.INTCol) - 1 = ASCII(t2.INTCol) 
      AND t1.date = t2.date
WHERE t2.id IS NULL

关于sql - 使用 TSQL,我可以将 CHAR(1) 列递增 1 并在没有 CASE 语句的 LEFT OUTER JOIN 中使用它吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/938357/

相关文章:

sql - #1064 - 你的 SQL 语法有错误;检查与您的 MariaDB 服务器相对应的手册

SQL Server : Insert INTO Statement syntax

sql - 为什么索引不能加速这个查询?

sql - 临时存储列数可变的表

php - 语法错误或访问冲突 : 1064

sql-server - 在 SQL Server 2008 R2/中创建新图表时出错

php - MySQL/PHP 更新查询未执行

Mysql以匹配 bool 模式选择下一个和上一个ID

.net - 用户“NT AUTHORITY\ANONYMOUS LOGON”登录失败

SQL Server 日期表 : programatically find the last Sunday in a given month