【问题标题】:Why is a string function in sql useful?为什么sql中的字符串函数有用?
【发布时间】:2026-01-08 02:25:02
【问题描述】:

我终其一生都无法弄清楚 SQL 中的字符串函数能做什么。我意识到我在书中的查询纯粹是为了练习,所以问题是任意的,但是例如:

select substring('San Antonio, TX', 5,3);

为什么您不能使用常规的 Select 语句和通配符获得相同的查询结果,找到从字符串的第五个字母开始的三个字母有什么好处?简而言之:在实际意义上,字符串函数实际上有什么用?谁能给我一些例子?谢谢。

【问题讨论】:

  • 这是一个糟糕的例子。一个更现实的例子是从字符串中提取状态。这需要更复杂的表达方式。 . .你可以工作。提示:len()length() 会有所帮助。
  • “为什么你不能用常规的 Select 语句和通配符得到相同的结果,” --- 你能吗?
  • “字符串函数实际上有什么用?” --- sting 函数非常适合处理字符串。
  • 这个问题太宽泛了。
  • 让我们假设(显然是为了您的帖子的目的)德克萨斯决定分成两部分,西德克萨斯 (WT) 和东德克萨斯 (ET)。如果没有字符串操作函数,您将如何进行更新,将 TX 替换为 WT?并非您对数据所做的一切都是简单的 SELECT。

标签: sql string-function


【解决方案1】:

我认为您的问题有两个部分:函数到底有什么用处,尤其是子字符串。

一般来说,重要的是在数据库中以最简单的形式存储事物,永远不要存储重复或依赖的数据。后一个原则意味着如果一列与另一列有任何关联,那么设计就是错误的。

例如,您应该存储名字和姓氏,但您不应该存储全名 - 可以派生。同样,您可以存储出生日期,但不存储年龄,因为可以再次导出。

字符串函数对于从更简单的字符串派生数据很有用。

特别是,substring 函数用于提取字符串的一部分。如果您有一个复杂的字符串,则可能需要将其分解为更小的组件。这对于产品代码或某些类型的真正由部分组成的序列代码特别有用。

substring 直接用于包含不同部分的字符串。如果是这样,那么您需要将它们与更复杂的东西结合起来。

话虽如此,在设计良好的数据库中,substring 函数几乎没有真正的需求。如果数据确实是部分的组合,那么它应该已经被分成单独的列。这就是原子性的原则,保证每一项数据都是最小的单位。

在您的示例中,该字符串应该位于城镇和州的 2 个单独列中,因此无需进一步从中提取任何内容。

【讨论】:

  • 我反对真正的需要。通常情况下,您需要操作字符串,尤其是在处理从外部来源或通过手动数据输入接收的数据时。您和 OP 一样,似乎忘记了数据比简单的 SELECT 语句更多。
  • @KenWhite 我什么都没忘记。如果一个数据库设计得很好,那么它就是原子的,如果一个数据库是真正的原子的,那么就没有什么可以分解的了。如果数据输入错误,那么它当然需要你可以扔给它的所有字符串函数。我没有说字符串函数没什么用。我试图解释,如果数据是原子的,substring 将不会得到太多锻炼。
  • 这根本不是你说的。您说对子字符串函数几乎没有真正的需要,这是完全错误的。我们生活在现实世界中。当数据来自外部来源(例如 EDI)时,并非所有数据都在您的完全控制之下。除非您生活在自己的小数据泡沫中,否则字符串操作函数是有正当理由的。
  • @KenWhite Fine ...