如何在SQL中的字符串中实现字符串
Posted
技术标签:
【中文标题】如何在SQL中的字符串中实现字符串【英文标题】:How to implement string whitin a string in SQL 【发布时间】:2019-09-02 06:36:07 【问题描述】:这是非英语网页设计师所理解的痛苦之一:
假设我有一个单元格,其值为'450\k\200'
,正如您所见,k
位于两者之间,因为它是一个英文字符,但如果它是'450\ک\200'
,则非英文ک
字符显示在右侧这是非英语语言的问题。
我可以应用一个技巧并将其插入到table
、tr
、td
标记中,如下所示:
<table><tr>
<td>450\</td><td>ک</td><td>\200<td>
</tr></table>
有效。
问题是关于查询的,如何按\
字符分割文本,然后按照我刚才提到的格式实现相关标签?
我认为可以使用以下内容:
SELECT STRING_AGG( (SELECT value FROM STRING_SPLIT ( '450\k\200' , '\' )) , ',')
但我收到错误消息:
Cannot perform an aggregate function on an expression containing an aggregate or a subquery.
我该如何处理这个奇怪的问题?如果您提出除table
标签以外的任何技巧,我将不胜感激,我什至尝试了pre
或code
标签,但即使它也没有解决问题。
【问题讨论】:
您的问题描述不是很清楚,抱歉。您是否正在尝试使用 html 解决 SQL 问题?但从表面上看,这更有可能是 Unicode BIDI 问题。 正确的语法是SELECT STRING_AGG(value, ',') FROM STRING_SPLIT('450\k\200', '\' )
。请注意,STRING_SPLIT
不保证子字符串的顺序。
我试图启发这件事,当我想手动显示它时,我发现了一个通过使用table
、tr
和td
标签来处理问题的技巧,但问题是关于当它被查询结果填充时,如何更改查询结果以便像我提到的那样格式化单元格值?
@Zhorov 谢谢,你是对的,但是如何实现table
、tr
和td
标签呢?
【参考方案1】:
感谢@Zhorov 指出解决方案,我完成了查询并且它有效,这是查询:
SELECT '<table><tr>' + STRING_AGG('<td>' + value +'</td>', '') + '</tr></table>'
FROM STRING_SPLIT(N'450\ک\200', '\' );
【讨论】:
考虑简单替换:SELECT CONCAT('<table><tr><td>', REPLACE('450\k\200', '\', '</td><td>'), '</td></tr></table>')
@ Zhorov,+1,了不起的解决方案,您没有使用 STRING_AGG()
和 STRING_SPLIT()
函数,而仅通过使用 CONCAT()
和 REPLACE()
函数获得了相同的结果,尽管它似乎有点令人困惑,因为我不想在结果中删除反斜杠,我更喜欢这个:SELECT CONCAT('<table><tr><td>', REPLACE('450\k\200', '\', '\</td><td>'), '</td></tr></table>')
以上是关于如何在SQL中的字符串中实现字符串的主要内容,如果未能解决你的问题,请参考以下文章