SQL 在 WHERE 子句中查看子字符串?

SQL view with substring in WHERE clause?

我想将此查询放入新视图中。供您参考 dbo.TransferAS400Auftrag 也是一种观点。

SELECT  dbo.TransferAS400Auftrag.Angebotsnummer AS AngNr1, 
        dbo.CSDokument.Angebotsnummer AS AngNr2, 
        dbo.TransferAS400Auftrag.OfferAngebotsnummer AS OAngNr1, 
        substring(dbo.TransferAS400Auftrag.OfferAngebotsnummer, 1, 10) AS OAngNr1_SUB10,
        dbo.CSDokument.OfferAngebotsnummer AS OAngNr2, 
        substring(dbo.CSDokument.OfferAngebotsnummer, 1, 10) AS OAngNr2_SUB10

FROM    dbo.TransferAS400Auftrag INNER JOIN
        dbo.CSDokument ON dbo.TransferAS400Auftrag.Angebotsnummer = 
        dbo.CSDokument.Angebotsnummer

WHERE   (LEN(dbo.TransferAS400Auftrag.OfferAngebotsnummer) > 10) AND 
        substring(dbo.TransferAS400Auftrag.OfferAngebotsnummer, 1, 10) 
        =  substring(dbo.CSDokument.OfferAngebotsnummer, 1, 10)

但是 management studio 的视图生成器总是将 substring() = substring() 部分从 where 子句更改为 INNER JOIN 部分。但是有了这个更改,我无法保存视图 (error- object reference not set to an instance of an object)。为什么不能在 WHERE 子句中使用 substring() = substring()?或者我可以通过其他方式达到目标吗?

嗯,没问题,CREATE VIEW 成功了。估计真的是builder的问题。谢谢指点。

只需使用 Transact SQL 创建它,而不是像这样使用 management studio 创建视图 windows:

CREATE VIEW AS ViewName
AS
    SELECT  dbo.TransferAS400Auftrag.Angebotsnummer AS AngNr1, 
            dbo.CSDokument.Angebotsnummer AS AngNr2, 
            dbo.TransferAS400Auftrag.OfferAngebotsnummer AS OAngNr1, 
            substring(dbo.TransferAS400Auftrag.OfferAngebotsnummer, 1, 10) AS OAngNr1_SUB10,
            dbo.CSDokument.OfferAngebotsnummer AS OAngNr2, 
            substring(dbo.CSDokument.OfferAngebotsnummer, 1, 10) AS OAngNr2_SUB10

    FROM    dbo.TransferAS400Auftrag INNER JOIN
            dbo.CSDokument ON dbo.TransferAS400Auftrag.Angebotsnummer = 
            dbo.CSDokument.Angebotsnummer

    WHERE   (LEN(dbo.TransferAS400Auftrag.OfferAngebotsnummer) > 10) AND 
            substring(dbo.TransferAS400Auftrag.OfferAngebotsnummer, 1, 10) 
            =  substring(dbo.CSDokument.OfferAngebotsnummer, 1, 10);