0

検索を実行し、いくつかの列に何百ものレコードを表示する SQL クエリがあります。ただし、2 つの列の表示は変更する必要があります。発効日とパージ日。現在、両方とも次のように表示されています: (例: 1991 年 8 月 29 日)。出力を 29-Aug-1991 に変更したいと考えています。このデータをデータベースからテーブルに直接プルしているため、これをどのように行うかわかりません。
このプロジェクトでは MS-SQL と PHP を使用していることに注意してください。

これは私のSQLクエリです:

   $sql = "select SerialNum as [Serial Number],ts_sitename As Site,(case m.Scratched
   when 0 then 'Live'
   when 1 then 'Free'
   END) as Status,  Note as Comment, (case Destroyed when 0 then 'NO'
   when 1 then 'YES' END) as [Destroyed], 
   SUBSTRING(cast(mg_effectivedate as char), 1, 12) AS [Effective Date],  
   SUBSTRING(cast(mg_effectivedate as char), 12, 8) AS [Effective Time], 
   SUBSTRING(cast(ScratchedDate as char), 1, 4) + '-' +
   SUBSTRING(cast(ScratchedDate as char), 3, 2) + '-' +
   SUBSTRING(cast(ScratchedDate as char), 5, 2)
   AS [Scratched Date], 
   SUBSTRING(cast(ScratchedDate as char), 10, 2) + ':' +
   SUBSTRING(cast(ScratchedDate as char), 12, 2) + ':' +
   SUBSTRING(cast(ScratchedDate as char), 14, 2) 
   AS [Scratched Time], 
   SUBSTRING(cast(mg_scratchdate as char), 1, 12) AS [Purge Date], 
   (select fl_filename from TheFiles_tab where mg_filenum = fl_filenum) as [Dataset],
   (select hs_hostname from TheHosts_tab where mg_hostnum = hs_hostnum) as [Host], 
   (select UserCode from [User] where mg_usernum = UserId) as [UserCode]
   from ((Media m left join MediaGenT g on m.MediaId = g.mg_medianum) 
   join TheSites_tab s on m.SiteId = s.ts_sitenum) 
   join Note n on m.NoteId = n.NoteId
   where SerialNum like '" . $userQuery . "%'"; 

そして、これは2つの列を表示するための私のコードです:

   echo '<th>Effective Date</th>';
   echo '<th>Purge Date</th>';

   foreach ($result as $r) 
   { 
   echo "<tr>"; 
   echo "<td>".$r['Serial Number'] . " </td>"; 
   echo "<td>".$r['Site'] . " </td>"; 
   echo "<td>".$r['Status'] . "</td> ";
   echo "<td>".$r['Comment'] . " </td>";  
   echo "<td>".$r['Destroyed'] . " </td>"; 
   echo "<td>".$r['Effective Date'] . " </td>"; 
   echo "<td>".$r['Effective Time'] . "</td> ";

   echo "<td>"; 
   if ($r['Scratched Date'] == "") { 
   echo "NULL"; 
   } 
   else { 
   echo $r['Scratched Date']; 
   }  echo "</td>";

   echo "<td>" ;
   if ($r['Scratched Time'] == "") { 
   echo "NULL"; 
   } 
   else { 
   echo $r['Scratched Time']; 
   }  echo "</td>";


   echo "<td>".$r['Purge Date'] . " </td>"; 
   echo "<td>".$r['Dataset'] . "</td> ";
   echo "<td>".$r['Host'] . " </td>";  
   echo "<td>".$r['UserCode'] . " </td>";  
   echo "<td>".$r['NoteId'] . " </td>"; 
   echo "</tr>";
   } 

私はSOコミュニティに不慣れであることに注意してください。私はいつもこのウェブサイトを調査に使用してきましたが、初めてアカウントを作成しました。

4

1 に答える 1

0

私の理解が正しければ、単に日付のスペースをハイフンに置き換えたいだけですか?

現在、日付の形式は次のとおりです。 MMM DD YYYY

あなたはこれを求めている: DD-MMM-YYYY

私の記憶が正しければ、PHP では次のように実行できます。

$effective_date = date("d-M-Y", strtotime($r['Effective Date']));

これにより、データベースから取得された値がタイムスタンプに変換され、そのタイムスタンプが新しい日付表記にフォーマットされます。他にどのようなオプションがあるかについては、php の date() 関数を調べてください: PHP: date - Manual

変更したい他の日付についても同様です。

編集

PHP コードの合計:

echo '<th>Effective Date</th>';
echo '<th>Purge Date</th>';

foreach ($result as $r) 
{
    echo "<tr>"; 
    echo "<td>".$r['Serial Number'] . " </td>"; 
    echo "<td>".$r['Site'] . " </td>"; 
    echo "<td>".$r['Status'] . "</td> ";
    echo "<td>".$r['Comment'] . " </td>";  
    echo "<td>".$r['Destroyed'] . " </td>";
    echo "<td>".date("d-M-Y", strtotime($r['Effective Date'])) . " </td>"; 
    echo "<td>".$r['Effective Time'] . "</td> ";

    echo "<td>"; 
    if ($r['Scratched Date'] == "") { 
    echo "NULL"; 
    } 
    else { 
    echo $r['Scratched Date']; 
    }  echo "</td>";

    echo "<td>" ;
    if ($r['Scratched Time'] == "") { 
    echo "NULL"; 
    } 
    else { 
    echo $r['Scratched Time']; 
    }  echo "</td>";


    echo "<td>".date("d-M-Y", strtotime($r['Purge Date'])) . " </td>"; 
    echo "<td>".$r['Dataset'] . "</td> ";
    echo "<td>".$r['Host'] . " </td>";  
    echo "<td>".$r['UserCode'] . " </td>";  
    echo "<td>".$r['NoteId'] . " </td>"; 
    echo "</tr>";
} 
于 2013-08-27T15:47:12.310 に答える