在PostgreSQL表的列中插入下标文本

时间:2017-06-09 10:21:24

标签: postgresql

我想将H2O插入到" 2"应该存储为PostgreSQL表(H₂O)中的下标。 什么是插入查询?

1 个答案:

答案 0 :(得分:1)

如果您输入:

  • 总是化学式,
  • 主要使用(但不正确)正常数字,
  • 正常数字无论如何都不会发生,只有subscripts

然后您可以在插入时使用translate()函数:

translate(formula, '0123456789', '₀₁₂₃₄₅₆₇₈₉')

http://rextester.com/XUDCXA71407

如果您还有其他字符,您想要替换它们的对应字符,那么您需要一个稍微高级的表达式:

regexp_replace(translate(regexp_replace(formula, '<.*?>', '', 'g'), '0123456789-', '₀₁₂₃₄₅₆₇₈₉₋'), 'x(e[urs]|[^e]|$)', 'ₓ\1', 'ig')

http://rextester.com/SCHLWJ33436

备注

  • 上面的表达式只添加-X,但
  • 它假设-始终需要在下标
  • X只需要在下标中,其中
    • 后面没有e(所以会按原样离开Xe
    • 如果后跟e,则必须使用urs继续字符串(??ₓEu {{1}将生成{}}和??ₓEr
  • 正如您所看到的,这取决于实际的周期表,所以我认为这种解决方案非常脆弱,但SQL中没有其他解决方案可以解决您的问题
  • 另外,unicode下标集非常有限。您可以为此转换添加更多对,但您应该考虑存储原始公式。

或者,如果您可以保证每个下标??ₓEs都是小写的(这样,它就不会与x发生碰撞),那么:

Xe

http://rextester.com/WPRDO99076