这有点复杂,所以请耐心等待。
多亏了这个问题,我才弄清楚了基本概念
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 工作。