2015-07-21 43 views
0

我將表格中的週末保存爲0,6(星期日,星期六)和星期一(如星期一,星期四,星期六)的星期六和星期六。選擇時,我需要用合適的工作日替換數字。例如,用SQL中的工作日替換逗號分隔的數字

SELECT WEEKEND_DAYS FROM TABLE_1 

返回

WEEKEND_DAYS 
1,4,6 

但我需要的O/P爲

WEEKEND_DAYS 
Monday,Thursday,Saturday 

如何實現這一目標?在此先感謝...

+1

警告:您很可能有數據建模問題。如果您正在構建新系統,請考慮對正常化的數據庫進行一些研究。如果這是一個「成熟」的系統,你不能改變你的運氣。 –

回答

2

使用醜陋REPLACE()可以做的工作

SELECT 
    WEEKEND_DAYS, 
    REPLACE(
    REPLACE(
    REPLACE(
    REPLACE(
    REPLACE(
    REPLACE(
    REPLACE(WEEKEND_DAYS 
    , 1, 'Monday') 
    , 2, 'Tuesday') 
    , 3, 'Wensday') 
    , 4, 'Thursday') 
    , 5, 'Friday') 
    , 6, 'Saturday') 
    , 0, 'Sunday') AS WEEKEND_DAYS_NAME 
FROM (VALUES('1,4,6')) TABLE_1(WEEKEND_DAYS) 
+0

它的工作......謝謝 –

0

你應該試試以下,

它將給你 6 =週日 0 =週一

DECLARE  @daynum VARCHAR(256) 
SET @daynum = '1,5,3,2' 
IF @daynum = '' RETURN 
      DECLARE @XML xml 
      SET @XML = '<root><csv>'+replace(@daynum,',','</csv><csv>')+ 
                 '</csv></root>' 

    Select STUFF(( SELECT ',' + dayname 
    FROM    
    (   
     Select DATENAME(DW,CAST(ListMember AS INT)) as dayname from 
      (
     SELECT rtrim(ltrim(replace(Word.value('.','nvarchar(max)'),char(10),''))) 
             AS ListMember 
       FROM @XML.nodes('/root/csv') AS WordList(Word) 
     )T 
    ) T2    
     ORDER BY dayname 
       FOR XML PATH('') 
      ), 1, 1, '') 

這是SQL Fiddle

您也可以創建拆分功能,然後根據需要調用它。

CREATE FUNCTION dbo.fnParseStringXML (
      @StringList NVARCHAR(MAX), 
      @Delimiter CHAR(1)) 
RETURNS @TableList TABLE(ID int identity(1,1) PRIMARY KEY, 
                         [Substring] NVARCHAR(max)) 
BEGIN 
      IF @StringList = '' RETURN 
      DECLARE @XML xml 
      SET @XML = '<root><csv>'+replace(@StringList,@Delimiter,'</csv><csv>')+ 
                 '</csv></root>' 
      INSERT @TableList 
      SELECT rtrim(ltrim(replace(Word.value('.','nvarchar(max)'),char(10),''))) 
             AS ListMember 
      FROM @XML.nodes('/root/csv') AS WordList(Word) 
RETURN 
END -- FUNCTION 
GO 

你應該把它以這種方式。

Select DATENAME(DW,CAST(Substring AS INT)) from 
(
    SELECT Substring FROM  dbo.fnParseStringXML  (@ProductCode, ',') 
)T 
+0

感謝您的回答,您的第一組代碼給個別行的日子,我需要它在逗號分隔。而返回@Tablelist的函數傳遞兩列只有數字,而不是平日,在分開的行,我需要它在逗號分隔。 –

+0

@Eric爲此提供了一個簡單的解決方案,我的目標是給你另一種選擇,告訴你如何處理這類數據。 :) –

+0

順便看看更新的答案(第一個查詢),它會給你輸出你想要的。 –

0

它爲我工作。 希望它有幫助。 使用1-7天索引

<?php 
$result=""; 

// include("database.php"); 
mysql_connect("localhost","root","") or die(mysql_error()); 
mysql_select_db("db_name") or die(mysql_error()); 


$query= mysql_fetch_row(mysql_query("SELECT weekend_days from weekend where weekend_days= '1,4,6'")); 
if (!$query) { 
    echo "No weekend"; 
} 
else { 
$new= explode(",", $query[0]); 
for ($i=0; $i < sizeof($new) ; $i++) { 
    if($new[$i]==1){ 
     $result.= " Sunday"; 
    } 
    elseif($new[$i]==2) { 
     $result.=", Monday"; 
    } 
    elseif($new[$i]==3){ 
     $result.= ", Tuesday"; 
    } 
    elseif($new[$i]==4){ 
     $result.= ", Wednesday"; 
    } 
    elseif($new[$i]==5){ 
     $result.=", Thursday"; 
    } 
    elseif($new[$i]==6){ 
     $result.= ", Friday"; 
    } 
    elseif($new[$i]==7){ 
     $result.= ", Saturday"; 
    } 
} 
echo "WEEKEND_DAYS " . $result; 
} 

?> 
0

試試這一個。

SELECT 
    REPLACE(
    REPLACE(
    REPLACE(
    REPLACE(
    REPLACE(
    REPLACE(
    REPLACE(WEEKEND_DAYS 
    , 1, 'Monday') 
    , 2, 'Tuesday') 
    , 3, 'Wednesday') 
    , 4, 'Thursday') 
    , 5, 'Friday') 
    , 6, 'Saturday') 
    , 0, 'Sunday') AS WEEKEND_DAYS_NAME 
FROM TABLE_1