获取数字后/存储过程
SUBSTRING(myvalue的,CHARINDEX( '/',myvalue的)+ 1,8000)
假设你可以保证斜线和数字会存在:
SELECT SUBSTRING(myfield, CHARINDEX('/', myfield)+1, 1000) FROM mytable;
如何让之前“/”数字? – user42348 2009-08-27 06:58:44
的正确方式要做到这一点(在我看来,当然,因为“正确”是一个主观术语)将是修改模式,使这些值分开。
换句话说,2009年和1234年将在不同的列。
在速度和可伸缩性方面,在选择语句中使用每行函数几乎总是一个坏主意。这是因为DBMS必须在上执行计算,每提取一行单行,每提取一次时间。
如果你需要他们保持作为一个单一的专栏中,我已经在过去使用的一个技巧是使用插入/更新触发器有两个额外的列接收部分,所以你会:
SomeFields | Data | PostSlash
-----------------+-----------+----------
blah, blah, blah | 2009/1234 | 1234
是的,我知道这不是理想的3NF,但如果你做得对,那么出于性能原因打破它是完全可以接受的。触发器将保证列始终匹配,并且您会发现查询以最少的触发和数据重复开销运行得更快。
但是最好在创建或更新行时进行一次拆分,而不是每次读取它时都进行拆分。这是因为数据库通常比他们写的更多。触发费用在所有选择上摊销。请记住,如果您的表格较小或(出于一些奇怪的原因)书写比读取更频繁,那么使用每行功能可能会更好。
很高兴看到看起来超出问题的人。是的,可以直接回答这个问题,但有时候,更多地考虑这个问题会揭示出潜在的合适的解决方案。 – belugabob 2009-08-27 07:00:11
为了斜线前得到的数字,假设斜线总是存在:
SELECT LEFT(columnname, CHARINDEX('/', columnname, 1) - 1) FROM aTable
标题说的是一套,而queston另一... – Guffa 2009-08-27 07:30:24