【发布时间】:2013-08-04 10:11:09
【问题描述】:
这有点复杂,请耐心等待。
感谢THIS QUESTION,我已经弄清楚了基本概念
SELECT LENGTH(col) - LENGTH(REPLACE(col, 'Y', ''))
非常聪明的解决方案。
问题是,我正在尝试计算字符串标记的实例数,然后将该计数器乘以表示字符串数值的修饰符。哦,我有一个包含 50 个令牌的列表,每个令牌都有不同的值。
所以,取字符串“{5}{X}{W}{b/r}{2/u}{pg}”
查找令牌列表及其数值,我们得到:
{5} 5
{X} 0
{W} 1
{b/r} 1
{2/u} 2
{pg} 1
.... ....
因此,上面字符串的和值为5+0+1+1+2+1 = 10
现在,我真正要寻找的是一种方法来执行 Join 并为 TokenValue 表的每一列执行上述替换令牌获取长度技巧。
这有意义吗?
伪 SQL 示例:
SELECT StringColumn, TotalTokenValue
???
FROM TableWithString, TokenValueTable
也许这作为自定义函数会更好?
编辑
我想我已经完成了一半,但这有点难看。
SELECT StringColumn, LEN(StringColumn) AS TotalLen, Token,
{ fn LENGTH(Token) } AS TokenLength, TokenValue,
{ fn REPLACE(StringColumn, Token, '') AS Replaced,
{ fn LENGTH(Replaced) } AS RepLen,
{ TotalLen - RepLen / TokenLength} AS TokenCount },
{ TokenCount * TokenValue} CalculatedTokenValue
FROM StringTable CROSS JOIN
TokenTable
然后我需要将它包装在某种 Group By 中并获得 SUM(CalculatedTokenValue) 我可以在脑海中想象它,无法让 SQL 工作。
【问题讨论】:
-
哦,用值替换标记,然后执行某种 SUM() 函数怎么样?仍然卡在循环上。在代码中,我会做某种 FOR 循环,但仍在学习这种“在数据库中做所有事情”的趋势。大声笑。
-
什么是数据库?甲骨文?自定义函数将是特定于数据库的。
-
.NET 2013 附带的任何内容。可能是 SQL Server 的变体。有一个 FUNCTION 文件夹,所以我假设我可以制作自定义文件夹。 :P
-
Oracle 有下面的链接,看起来就像您想要的那样。我不确定 SQL Server。 forums.oracle.com/thread/585623
-
不要在数据库中做所有事情——这种语义解析在您选择的客户端语言中可能会更快。像 Awk、perl 或 Lisp 这样的基于字符串的字符串是最容易快速实现的。