我有一个正常的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。提前致谢
答案 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)。