Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 将作业编号作为字符串的一部分使用的有效方法_Sql - Fatal编程技术网

Sql 将作业编号作为字符串的一部分使用的有效方法

Sql 将作业编号作为字符串的一部分使用的有效方法,sql,Sql,使用sql2008r2 我们有几个系统,所有饲料生产过程。我们从这些报告中得到报告,需要按作业确定成本。我们从一些流程中获得的参考编号都是VARCHAR,它们可能以作业编号开始,也可能不以作业编号开始(例如,生产作业或非生产作业)。在许多情况下,我们无法控制引用字段的格式 例如: “五万份工作”是第五万份工作 “50001\u不同的工作”是第50001号工作 “100_TGE”是非生产作业。我只知道这一点,因为100不是一个生产作业不(太短)。会有一些错误识别的百分比非常小,所以我们可以接受它

使用sql2008r2

我们有几个系统,所有饲料生产过程。我们从这些报告中得到报告,需要按作业确定成本。我们从一些流程中获得的参考编号都是VARCHAR,它们可能以作业编号开始,也可能不以作业编号开始(例如,生产作业或非生产作业)。在许多情况下,我们无法控制引用字段的格式

例如:

“五万份工作”是第五万份工作 “50001\u不同的工作”是第50001号工作 “100_TGE”是非生产作业。我只知道这一点,因为100不是一个生产作业不(太短)。会有一些错误识别的百分比非常小,所以我们可以接受它

从这些我必须弄清楚什么是生产工作。我每年都会有一份有效工作编号表,因此2014年是50000到85000,2015年是85001到120000

因此,我必须:

  • 提取下划线的左侧
  • 确保它是一个整数
  • 然后确定它是否是有效的作业
  • 然后连接到另一个表(如果是)
  • 我可以做第一步

    SELECT LEFT(Reference,(CHARINDEX('_',Reference)-1)) -- need to work with 5 and 6 digit nos
    
    我有一个UDF(性能杀手)来测试它是否真的是int

    如果我使用内部联接,我想3和4可以合并

    所以我只剩下

    Select reference from log 
    Inner join jobs on jobs.jobno = IsReallyInt(LEFT(log.Reference,(CHARINDEX('_',log.Reference)-1)))
    
    性能不会是一流的

    这些参考涉及多个不同的第三方和内部DB。在某些情况下,我们可以添加计算列,以将作业编号隔离在其自己的字段中,但有些无法修改

    有人有更有效的方法吗

    问候

    标记这是您的查询:

    Select reference
    from log Inner join
         jobs
         on jobs.jobno = IsReallyInt(LEFT(log.Reference, CHARINDEX('_', log.Reference) - 1))
    
    IsReallyInt()
    是不必要的。您可以使用“不象“[^0-9]%”。但是,我认为实际上不需要提取整数。您可以直接与职务编号进行比较。那么,试试这个:

    Select reference
    from log Inner join
         jobs
         on log.Reference like jobs.jobno + '[_]%'
    

    这也是一个性能猪。但是,它可能会利用
    log.reference

    上的索引,参考表是什么样子的?不幸的是,有几个表有不同的格式(因为有多个系统)。它们基本上都有时间、物料代码、操作时间等。