一尘不染

使用TSQL,是否可以将CHAR(1)列加1,并在没有CASE语句的情况下在LEFT OUTER JOIN中使用它?

algorithm

除了这次,我使用字母而不是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 Server2005。我相信在PL /
SQL中有一个使用TRANSLATE的简单解决方案,但是我不能像使用TSQL那样做任何事情。


阅读 466

收藏
2020-07-28

共1个答案

一尘不染

您可以使用以下方式将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
2020-07-28