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

前端之家收集整理的这篇文章主要介绍了使用TSQL,我可以将CHAR(1)列递增1并在没有CASE语句的LEFT OUTER JOIN中使用它吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这个问题类似于我的 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.我相信在使用TRANSLATE的PL / sql中有一个简单的解决方案,但我不能做任何事情,比如使用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
原文链接:https://www.f2er.com/mssql/76255.html

猜你在找的MsSQL相关文章