如何在sql中显示列值的一部分?

时间:2016-03-17 06:46:33

标签: mysql sql

我需要从地址列中提取日期值。我的地址栏值可能有街道号,房屋号,城市,州,国家,日等等

但我想只提取城市价值或州价值或国家价值。如果所有值都存储在一个地址列中,我该如何提取该特定内容。

我正在使用mysql数据库。我那列的结构是 -

列名 - 地址

列类型 - varchar(500)

Common Column value -

Street No-4 , House No-29 , Prabhat Nagar , Ludhiana , Punjab , India , wednessday , 25 may 2014

代码中有检查可用于检查所需的值是否为空。 Streeno,房屋号码,城市,国家,州都是必需的。如果任何必填字段为空,则不会在db中插入或更新列并将清空

日期格式代码也在代码中修复,每次都会采用这种格式

3 个答案:

答案 0 :(得分:1)

你需要进行一些改进才能发挥作用。

因此,在地址栏中输入数据时,您需要维护一个结构每次插入数据时都会维护该结构,然后您可以通过下面的查询选择所需的结果 -

SELECT Mid(Title, Instr(Title, 'Day') + 4, Instr(Title, '|')- Instr(Title, ':')-1) As LastName FROM tblblog

数据库中的我的地址列值如下

Address

House No:29| Street No:4| Country:India| City:Ludhiana| Day:Thursday|

通过这种方式,您也可以搜索国家/地区,城市也适用于其他值。

说明:

Instr功能

它经常与其他字符串函数结合使用来操作字符串值。 Instr函数返回在另一个字符串中出现的字符串的位置。功能的格式如下:

Instr([start],stringToSearch,stringToFind)

start参数是可选的,它指定字符串中我们将开始搜索第二个字符串的位置。如果我们想从第一个字符串的第五个字符开始,那么我们将为start参数指定5。如果将其留空,则在第一个字符串的开头开始搜索。

中间功能

Mid(字符串,开始,长度)函数返回从指定位置开始并包含指定数量字符的字符串的一部分。

以下以dd / mm / yy格式从字符串列中提取月份值。提取的字符串从字符串中的第4个字符开始,以2个字符结束。

答案 1 :(得分:0)

确保城市名称以逗号(,)开头:

      SELECT
      LEFT(Address, CHARINDEX(',', Address)-1) as city,
      SUBSTRING(Address, CHARINDEX(',', Address)+1,
      LEN(Address) - CHARINDEX(' ', REVERSE(Address)) - CHARINDEX(',', Address)
      )  as state,
      RIGHT(Address, CHARINDEX(' ', REVERSE(Address)) - 1) as zip 

它将城市作为逗号的字符串的开头。
zip是字符串向后的结尾,直到找到第一个空格,因此19702或19702-1234的zip将起作用。 状态是逗号和字符串中最后一个空格之间的任何内容。

答案 2 :(得分:0)

我创造了这个。它会分离你的所有价值观。你忘了提及Area,所以我也添加了它。

SQLFiddle Demo

select 
    substring_index(substring_index(Address, ',', 1),',',-1) as street_no,
    substring_index(substring_index(Address, ',', 2),',',-1) as house_no,
    substring_index(substring_index(Address, ',', 3),',',-1) as area,
    substring_index(substring_index(Address, ',', 4),',',-1) as city,
    substring_index(substring_index(Address, ',', 5),',',-1) as state,
    substring_index(substring_index(Address, ',', 6),',',-1) as country,
    substring_index(substring_index(Address, ',', 7),',',-1) as day,
    STR_TO_DATE(trim(substring_index(substring_index(Address, ',', 8),',',-1)),'%d %b %Y') as date1
from table1

输出

+-------------+-------------+---------------+----------+--------+---------+------------+-----------------------+
|  street_no  |  house_no   |     area      |   city   | state  | country |    day     |         date1         |
+-------------+-------------+---------------+----------+--------+---------+------------+-----------------------+
| Street No-4 | House No-29 | Prabhat Nagar | Ludhiana | Punjab | India   | wednessday | May, 25 2014 00:00:00 |
+-------------+-------------+---------------+----------+--------+---------+------------+-----------------------+