[英]Extracting Number From String SQL
我有一个普通的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。 提前致谢
在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
您需要使用CharIndex和SubString(Microsoft SQL)或
这是我为Microsoft SQL Server创建的示例代码:
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首先找到第二个“(字符串现在是a:1:{i:0; s:7:” CO_2012),然后以-1向后搜索以找到第一个“(字符串现在为CO_2012)。然后向后搜索下划线(字符串现在为2012)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.