logo头像

Edward.K Thinking

Azure Cosmos DB 取得現在的時間


在使用Azure Cosmos DB時候,並不能像在使用一般的SQL DB一樣有內建函示可以直接取得當前時間,像是我們在SQL Server中可以用Getdate()取得現在系統時間。因此,今日想要在Cosmos DB也做出類似的用法,這部分必須要自己寫Function才有辦法。首先,必須到Cosmos DB的User Defined Functions新增一個取得目前時間的函示。新增User Defined Functions叫做NEW UDF

這邊撰寫的Function的語法並非是採用SQL語法開發,反而是使用Javascrip語言開發,所以,如果開發中遇到不太熟的語法或是用法,可以透過搜尋javascrip語法,大部分的問題都可以被解決。因此,如果要取得最新時間,語法為

1
2
3
function getdate(){
retun new Date();
}

如果想要被呼叫名稱與Function Name不同,可以在User Defined Function Id定義一個新的名字

要使用這個Function,必須在Function Name前面加上udf,表示是使用User Defined Functions的Function,其結果如下:

再做一個比較進階的,就是取得昨天的台灣時間

1
2
3
4
5
6
function UTCYesterday(){
var Yesterday=new Date();
Yesterday.setHours(Yesterday.getHours()+8);
Yesterday.setDate(Yesterday.getDate()-1);
return Yesterday.toJSON().substring(0,10);
}

由於使用new Date(),得到的時間是UTC的時間,所以,必須加八小時才會是台灣時間,這時候再做扣一天的動作,就可以取得昨日台灣日期。另外,如果我們希望傳回去的日期是yyyy-MM-ddd,在這裡並無直接語法可以使用。所以,必須透過toISOString()方式轉型,轉型出來後會包含時間,所以,再透過substring方式取到日期的長度,就可以得到yyyy-MM-ddd

不過在這範例中並無使用toISOString(),反而是使用toJSON()方式,主要在於當時在使用toISOString()得到的結果並無法直接在用在Cosmos DB的SQL語法中,像是select * from c where c.Date=udf.getdate()是會失效的,反而用toJSON()才可以正確搜尋到想要的資訊

上一篇