首页 > 解决方案 > 如何在 SQL 中进行子字符串计算?

问题描述

我正在处理一张满是客户在线订单的桌子。每个订单都有一个公司代码,可以是“09”、“07”、“04”、“03”和“01”。每个订单都有一个类似于“90180628”的订单号。您可以通过订单号的第一个数字来判断订单来自哪家公司。因此该订单是针对公司 09 的,而此“31610629”将是公司“03”的订单号

在我访问一个直接知道每个订单来自哪个公司的表之前,我的 WHERE 子句看起来像这样。

WHERE 
    (O.Company_Code = @CompanyCode OR @CompanyCode IS NULL) AND 
    (O.Division_Code = @DivisionCode OR @DivisionCode IS NULL) AND
    o.Customer_Number = 'ecom2x' AND 
    o.Customer_Purchase_Order_Number not like '%bulk%' AND
    o.DateRecordModified BETWEEN @FromDate AND DATEADD(dayofyear, 1, @ToDate)

其中@CompanyCode 是用户选择的参数(因为这是一份报告)等等。

但是,现在我使用的是不同的表,并且无法访问 O.Company_Code,因此我必须根据订单号检查公司代码。

所以它会是这样的

Where SH.Packslip like 'substring(@CompanyCode,2,1)%'

那是不起作用的伪代码,但这就是想法。有谁知道如何把它变成功能代码?也许我必须分两部分进行,第一部分我声明一个新变量并将其设置为等于第二个字符子字符串,然后我检查 packslip 是否以该新变量开头(因为我需要摆脱 0 09)

标签: sqlsql-serversubquerysubstring

解决方案


你可以试试这个。

Where SH.Packslip like substring(@CompanyCode,2,1) + '%'

推荐阅读