从字符串SQL中提取数字

时间:2014-11-04 09:22:16

标签: mysql

我有一个正常的SQL语句:

SELECT VALUE_ID, UF_CRM_TASK FROM b_uts_tasks_task

现在每次都返回一个不同的字段,但它们采用以下形式:

a:1:{i:0;s:7:"CO_2012";} or a:1:{i:0;s:5:"CO_12";} or a:1:{i:0;s:7:"CO_2017";}

基本上他们每次都不一样。我需要的是在CO_部分之后得到数字。我尝试过TRIM,但由于前导和尾随部分的一切都发生了变化,我认为这不会起作用。

我已经看了Stack Overflow一段时间但找不到它。我知道如何在PHP中实现它:

$data = $row['UF_CRM_TASK'];    
$companyID = substr($data, strpos($data, "CO_") + 1);
$newCompanyID = preg_replace('/[^0-9.]+/', '', $companyID);

但不是SQL。提前致谢

2 个答案:

答案 0 :(得分:2)

在MYSQL中有点难看:

/*SUBSTRING_INDEX BASED ON CO_ AND THE LAST " - in 2 SUBSTRINGS*/
SELECT `VALUE_ID`, SUBSTRING_INDEX(SUBSTRING_INDEX(`UF_CRM_TASK`, 'CO_', -1), '"', 1) AS `COMPANY_ID` FROM `b_uts_tasks_task`

在PHP中,您只需unserialize()

$data = unserialize($row['UF_CRM_TASK']);
$companyID = str_replace('CO_', '', $data[0]);

例如:

$data = unserialize('a:1:{i:0;s:5:"CO_12";}');
echo str_replace('CO_', '', $data[0]);
//==> 12

答案 1 :(得分:0)

您需要使用CharIndex和SubString(Microsoft SQL)或

这是我为Microsoft SQL服务器制作的示例代码:

declare @companyIdString varchar(50) = 'a:1:{i:0;s:7:"CO_2012";}'

print 'Company ID in a string: ' + @companyIdString
print 'Find first position: ' + Cast(charindex('"CO_', @companyIdString) as varchar(2))
print 'Locate the second position (the last "): ' + Cast(charindex('"', @companyIdString, charindex('"CO_', @companyIdString)+4) as varchar(2))
print 'Extracted Company Id: ' + substring(@companyIdString,charindex('"CO_', @companyIdString)+4, charindex('"', @companyIdString, charindex('"CO_', @companyIdString)+4) - charindex('"CO_', @companyIdString) - 4)

select 
@companyIdString as CompanyIdString,
substring(@companyIdString,charindex('"CO_', @companyIdString)+4, charindex('"', @companyIdString, charindex('"CO_', @companyIdString)+4) - charindex('"CO_', @companyIdString) - 4) as CompanyId

我也在mySQL服务器上制作了相同的代码:

set @companyIdString := 'a:1:{i:0;s:7:"CO_2012";}';

select 
@companyIdString as CompanyIdString, 
substring_index(substring_index(substring_index(@companyIdString, '"', 2), '"', -1), '_', -1) as CompanyId

substring_index首先找到第二个" (字符串现在是:1:{i:0; s:7:" CO_2012),然后用-1向后搜索以找到第一个" (字符串现在是CO_2012)。然后它向后搜索下划线(字符串现在是2012)。