请查看下表:
我需要"最后一部分" "我拥有的"如果它包含所有数字和字符串,则为数字。
在Excel中,我通过以下功能实现了这一点(如上所示):
=IFERROR(VALUE(TEXT(D2;"0"));TEXT(D2;"0"))
但是我想在mySQL中这样做才能更有效地计算。
我已经"漂浮" CASE
CAST
或CONVERT
以及TRIM
功能grid.IsReadOnly = true;
左右,但我还没有能够提出一些感性的东西。
一个很好的奖励"将提取"部分"通过寻找最后的" "字符(首先" "从字符串的右边开始),但根本不知道如何实现它。
答案 0 :(得分:2)
使用SUBSTRING_INDEX。
<强>查询强>
SELECT
CASE
WHEN SUBSTRING_INDEX(records.data, '_', -1) > 1 # is int check '00004949' returns 1
THEN SUBSTRING_INDEX(records.data, '_', -1) + 0 # converts '00004949' to 4949
ELSE SUBSTRING_INDEX(records.data, '_', -1)
END
AS word
FROM (
SELECT "TRA_PL_NWL_EMA_NWLY_DAI_000_20170610_IN1_01P002bc" AS DATA
UNION
SELECT "TRA_PL_NWL_EMA_NWLY_DAI_000_2017_0909_JET_00004949" AS DATA
) records
<强>结果强>
word
----------
01P002bc
4949
答案 1 :(得分:0)
以下查询将在某种程度上完成任务:
SELECT
case
when SUBSTRING_INDEX(value, "_", -1) REGEXP('(^[0-9]+$)')
then Trim(Leading 0 from SUBSTRING_INDEX(value, "_", -1))
else SUBSTRING_INDEX(value, "_", -1)
end as Value
From yourtable;
希望它有所帮助!
答案 2 :(得分:0)
我希望这就是你想要的。 至少它符合你的要求。
SELECT
CASE
WHEN (
CONVERT(
substring(
txt,
LENGTH(txt) - LOCATE('_', REVERSE(txt))+2,
length(txt)
)
, signed integer
)
) = 0
THEN substring(
txt,
LENGTH(txt) - LOCATE('_', REVERSE(txt))+2,
length(txt)
)
ELSE CONVERT(
substring(
txt,
LENGTH(txt) - LOCATE('_', REVERSE(txt))+2,
length(txt)
)
, signed integer
)
END as NUMBER
from test.test
这是我的测试表和SQL的结果:
txt NUMBER
DA_DA_ADAD_ADAD_ADAD_asd123 asd123
DA_DA_ADAD_ADAD_ADAD_000123 123
DA_DA_ADAD_ADAD_ADAD_444 444
DA_DA_ADAD_ADAD_ADAD_bsd123 bsd123
DA_DA_ADAD_ADAD_ADAD_csd123 csd123
DA_DA_ADAD_ADAD_ADAD_dsd123 dsd123