按分隔符拆分的sql查询字符串

rbpvctlc  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(362)

我有一个查询,它返回一个像今年月份信息一样存储的字段。比如2018年2月的整版数据。我需要将它除以“-”值,这样就可以得到三列,而不是只返回一列。
年-月文本
2018年2月整版
文本的格式不是固定的,因此catch必须使用“-”符号,并且数据将始终以这种方式拆分。如何轻松做到这一点?
编辑:
这是我的密码
声明@str varchar(80)
从vw\u mra\u adcontracts中选择@str=ipdesc
声明@first\u dash int=charindex('-',@str,1)声明@last\u dash int=charindex('-',reverse(ltrim(rtrim(@str)))
选择profileid,orgname,@str,

Substring(@Str, 1, @first_dash-1) as AdYear, 
Substring(@Str, @first_dash+1, Len(@Str)-@first_dash-@last_dash) as AdMonth, 
Substring(@Str, @last_dash+@first_dash, Len(@Str)) as AdSold,

来自vw\ mra\ ADU合同
问题是这个变量似乎没有遍历所有可用的记录,获取一条记录,然后拆分一条记录。所以对于adyear、admonth和adsold,我得到的每个返回记录的值都完全相同,即使它与该记录的值不匹配。

72qzrwbm

72qzrwbm1#

你可以这样做:

declare @STR varchar(80) = 'WHATEVER-YOUR-STRING IS'

例如:“2018年2月整版”

declare @fist_dash int = CHARINDEX('-',@STR,1)
declare @last_dash int = CHARINDEX('-',REVERSE(LTRIM(RTRIM(@STR))))

select @STR
,[YEAR]=substring(@STR,1,@fist_dash-1)
,[MONTH]=substring(@STR,@fist_dash+1,LEN(@STR)-@fist_dash-@last_dash)
,[TEXT]=substring(@STR,@fist_dash+1+LEN(substring(@STR,@fist_dash+1,LEN(@STR)-@fist_dash-@last_dash+1)),LEN(@STR))

返回以下内容:

(No column name)        YEAR     MONTH      TEXT
2018-February-Full Page 2018     February   Full Page
WHATEVER-YOUR-STRING IS WHATEVER YOUR       STRING IS
xqkwcwgp

xqkwcwgp2#

另一种方法是使用此查询。如果字符串的参数少于3个,并且对于第一个参数(year)是第一个子字符串,则查询中的concat是为了防止错误的结果。
只需更改表中包含字段的字符串。

SELECT
    SUBSTRING_INDEX( SUBSTRING_INDEX( CONCAT("2018-Jan-Hello",'--'), '-', 1),'-',-1) AS 'Year',
    SUBSTRING_INDEX( SUBSTRING_INDEX( CONCAT("2018-Jan-Hello",'--'), '-', 2),'-',-1) AS 'Month',
    SUBSTRING_INDEX( SUBSTRING_INDEX( CONCAT("2018-Jan-Hello",'--'), '-', 3),'-',-1) AS 'Text';

样品

MariaDB [(none)]> SELECT
    ->     SUBSTRING_INDEX( SUBSTRING_INDEX( CONCAT("2018-Jan-Hello",'--'), '-', 1),'-',-1) AS 'Year',
    ->     SUBSTRING_INDEX( SUBSTRING_INDEX( CONCAT("2018-Jan-Hello",'--'), '-', 2),'-',-1) AS 'Month',
    ->     SUBSTRING_INDEX( SUBSTRING_INDEX( CONCAT("2018-Jan-Hello",'--'), '-', 3),'-',-1) AS 'Text';
+------+-------+-------+
| Year | Month | Text  |
+------+-------+-------+
| 2018 | Jan   | Hello |
+------+-------+-------+
1 row in set (0.00 sec)

MariaDB [(none)]>
MariaDB [(none)]> SELECT
    ->     SUBSTRING_INDEX( SUBSTRING_INDEX( CONCAT("2018-Jan",'--'), '-', 1),'-',-1) AS 'Year',
    ->     SUBSTRING_INDEX( SUBSTRING_INDEX( CONCAT("2018-Jan",'--'), '-', 2),'-',-1) AS 'Month',
    ->     SUBSTRING_INDEX( SUBSTRING_INDEX( CONCAT("2018-Jan",'--'), '-', 3),'-',-1) AS 'Text';
+------+-------+------+
| Year | Month | Text |
+------+-------+------+
| 2018 | Jan   |      |
+------+-------+------+
1 row in set (0.00 sec)

MariaDB [(none)]>

相关问题