我甚至不确定这是否可能。我用谷歌搜索了一下,但我没有找到我需要的东西。
基本上,我有一个返回字符串的查询。字符串很长,似乎有一个*作为"分隔符"。它仍然是一个字符串。
我需要做的是,把前两个实际的单词变成变量。
当返回字符串时,它看起来像这样:
ABCD*RANDOMNAME*VB259E*5301*26042014*4992*K*CMAU
可以看到,每个部分之间有一个*分隔。
我需要提取前两个部分,其中它读取ABCD和RANDOMNAME。当然,前4个字符也是随机的,但总是4个字符。在读取RANDOMNAME的第一个*之后,这部分可能有更多或更少的字符。但是我不需要第二个*之后的任何东西。
我想我必须使用substr函数,但我不确定如何在这种情况下应用它。
我这样检索结果:
<?php
voyage = $_POST['voyage'];
$query = "SELECT blah blah blah FROM blah WHERE blah = '$voyage'";
$result = odbc_exec($connect, $query); // result is a long string as detailed above
$first = ""; // first substring
$second = ""; // second substring
// both would go into this next variable
$dateFile = $first . " - " . $second . " - " . $voyage . " - " . date('dmY'). ".txt";
?>
如您所见,我需要提取子字符串来为文本文件创建一个名称。
这两个子字符串将被放入变量$first和$second中。
我很感激你的帮助。
PLEASE PLEASE PLEASE -我还在努力掌握PHP和MYSQL。我的客户正在使用Oracle数据库,所以我实际上只是开始使用PHP和ODBC命令。请原谅我对这件事的无知。如果你有一个对我有帮助的答案,那么请尽一切努力帮助我。如果没有,请继续下一题
这更像是一个SQL或PHP字符串操作问题,应该不会太难。您可以将列中存在的字符串提取到PHP中并在那里进行操作,或者完全使用SQL并简单地从分隔的列中获取。
下面是SQL示例:select
left(
'ABCD*RANDOMNAME*VB259E*5301*26042014*4992*K*CMAU',
locate('*', 'ABCD*RANDOMNAME*VB259E*5301*26042014*4992*K*CMAU') - 1) as first,
substring(
'ABCD*RANDOMNAME*VB259E*5301*26042014*4992*K*CMAU',
locate('*', 'ABCD*RANDOMNAME*VB259E*5301*26042014*4992*K*CMAU'),
locate('*', 'ABCD*RANDOMNAME*VB259E*5301*26042014*4992*K*CMAU', locate('*', 'ABCD*RANDOMNAME*VB259E*5301*26042014*4992*K*CMAU') + 1) - locate('*', 'ABCD*RANDOMNAME*VB259E*5301*26042014*4992*K*CMAU')) as second
我在这里使用了字符串字面量,你试图提取的字符串,我假设在你的SQL中,你会使用列引用。注意,这是使用ODBC标量函数,您可能需要将left/locate/substring的每次调用包装在{fn…}在一些ODBC驱动程序中。SQL相当混乱,但它可以工作。
第二种可能更简单的解决方案是在PHP中进行提取:
$string = 'ABCD*RANDOMNAME*VB259E*5301*26042014*4992*K*CMAU';
$firstStarIndex = strpos($string, '*');
$first = substr($string, 0, $firstStarIndex);
$second = substr($string, $firstStarIndex + 1, strpos($string, '*', $firstStarIndex + 1) - $firstStarIndex - 1);
请注意,为简洁起见,省略了错误检查和验证。