【问题标题】:Format SQL String格式化 SQL 字符串
【发布时间】:2015-12-14 18:41:12
【问题描述】:

我在 SQL 视图中有各种值,格式如下:

SoftwareName_Language_Architecture_Type_Version_{GUID}_INSTALL.Log

例如:Java-v6.27_ALL_x86_MSI_pV1.0_{26A24AE4-039D-4CA4-87B4-2F86416027FF}_INSTALL.Log

我希望这个结果出现在不同的列中:

SoftwareName
Architecture
Language

我正在使用各种功能 RIGHT,LEFT,CHARINDEX,TRIM 等处理多个 _ 字符。

【问题讨论】:

  • 在您的格式掩码中,您有 4 个下划线,但在您的示例数据中,您有 6 个。您有处理多余下划线的规则吗?
  • 我已经更正了帖子
  • 在 Postgres 中你只需要使用 string_to_array(),但在 SQL Server 中,你需要自己定义一个表值函数,参见msdn.microsoft.com/en-us/library/ms191165.aspx
  • 有很多现成的 SQL 拆分函数可以用于此。只需谷歌SQL Split Function

标签: sql sql-server string trim charindex


【解决方案1】:

这在 SQL 中很难做到,因为没有拆分功能。用其他编程语言很容易做到。我会考虑将您的 SQL 输出放入一个文件中,然后使用诸如 python 之类的编程语言处理该文件,例如:

>>> field='Java-v6.27_ALL_x86_MSI_pV1.0_{26A24AE4-039D-4CA4-87B4-
>>> print '\n'.join(field.split('_'))
Java-v6.27
ALL
x86
MSI
pV1.0
{26A24AE4-039D-4CA4-87B4-2F86416027FF}
INSTALL.Log

或者在 Bash 中

echo 'Java-v6.27_ALL_x86_MSI_pV1.0_{26A24AE4-039D-4CA4-87B4-2F86416027FF}_INSTALL.Log'|sed "s/_/\n/g"
Java-v6.27
ALL
x86
MSI
pV1.0
{26A24AE4-039D-4CA4-87B4-2F86416027FF}
INSTALL.Log

您可以通过命令行执行 SQL 和 bash,如下所示:

cat getstuff.sql | mysql -uuser -ppass -hhost db | sed "s/_/\n/g"

【讨论】:

    猜你喜欢
    • 2013-03-24
    • 1970-01-01
    • 2011-07-11
    • 2020-11-03
    • 1970-01-01
    • 2010-09-28
    • 1970-01-01
    • 2010-10-22
    相关资源
    最近更新 更多