如何在SQL中的字符串中实现字符串

Posted

技术标签:

【中文标题】如何在SQL中的字符串中实现字符串【英文标题】:How to implement string whitin a string in SQL 【发布时间】:2019-09-02 06:36:07 【问题描述】:

这是非英语网页设计师所理解的痛苦之一:

假设我有一个单元格,其值为'450\k\200',正如您所见,k 位于两者之间,因为它是一个英文字符,但如果它是'450\ک\200',则非英文ک 字符显示在右侧这是非英语语言的问题。

我可以应用一个技巧并将其插入到tabletrtd 标记中,如下所示:

<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 标签以外的任何技巧,我将不胜感激,我什至尝试了precode 标签,但即使它也没有解决问题。

【问题讨论】:

您的问题描述不是很清楚,抱歉。您是否正在尝试使用 html 解决 SQL 问题?但从表面上看,这更有可能是 Unicode BIDI 问题。 正确的语法是SELECT STRING_AGG(value, ',') FROM STRING_SPLIT('450\k\200', '\' )。请注意,STRING_SPLIT 不保证子字符串的顺序。 我试图启发这件事,当我想手动显示它时,我发现了一个通过使用tabletrtd标签来处理问题的技巧,但问题是关于当它被查询结果填充时,如何更改查询结果以便像我提到的那样格式化单元格值? @Zhorov 谢谢,你是对的,但是如何实现tabletrtd 标签呢? 【参考方案1】:

感谢@Zhorov 指出解决方案,我完成了查询并且它有效,这是查询:

    SELECT '<table><tr>' + STRING_AGG('<td>' + value +'</td>', '') + '</tr></table>'
    FROM STRING_SPLIT(N'450\ک\200', '\' );

【讨论】:

考虑简单替换:SELECT CONCAT('&lt;table&gt;&lt;tr&gt;&lt;td&gt;', REPLACE('450\k\200', '\', '&lt;/td&gt;&lt;td&gt;'), '&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;') @ Zhorov,+1,了不起的解决方案,您没有使用 STRING_AGG()STRING_SPLIT() 函数,而仅通过使用 CONCAT()REPLACE() 函数获得了相同的结果,尽管它似乎有点令人困惑,因为我不想在结果中删除反斜杠,我更喜欢这个:SELECT CONCAT('&lt;table&gt;&lt;tr&gt;&lt;td&gt;', REPLACE('450\k\200', '\', '\&lt;/td&gt;&lt;td&gt;'), '&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;')

以上是关于如何在SQL中的字符串中实现字符串的主要内容,如果未能解决你的问题,请参考以下文章

python中实现字符串使用非"+"号拼接的方式实现

如何在 VIsual C++ 2010 中实现 C++ 原始字符串文字?

在 Android 中实现自定义 ListView

如何在java中实现字符串的近似匹配?

在JDBC中实现SQL语句的模糊查询

如何在没有正则表达式的情况下在 C++ 中实现有效的全字字符串替换?