2012-03-12 21 views
2

有効なSQL Serverの日付を取得するSQL関数が必要です。その日付の月面を返します。関数が見つかりましたが、unfortunaley pl-sqlには理解できませんが、そのままコードを変換できますが、SQL Serverでジュリアン日付を取得する方法はわかりません。PL-SQLをSQL Serverに変換する

これは私がPL-SQLコードがhere配置されて

IF OBJECT_ID (N'dbo.fn_phaseOfMoon', N'FN') IS NOT NULL 
    DROP FUNCTION dbo.fn_phaseOfMoon; 
GO 
CREATE FUNCTION dbo.fn_phaseOfMoon (@DATE datetime) 
RETURNS VARCHAR(30) AS 
BEGIN 
    RETURN 'NA'; 
END 
GO 

を使用したいスケルトン機能である、誰かが正しい方向に私を指す、またはコードを変換する助けてくださいことができますか?

答えて

1

これは私がMSSQLに変更したJavaコードです。参照してください場合は、トリックはあなたのためです。

CREATE FUNCTION dbo.fn_phaseOfMoon (@Date datetime) 
RETURNS INT 
BEGIN 

Declare @y int, 
     @m int, 
     @d int, 
     @c int, 
     @e int, 
     @b int, 
     @jd float 

Select @y = DatePart(yy, @Date), @m = DatePart(mm, @Date), @d = DatePart(dd, @Date) 
    /* 
     calculates the moon phase (0-7), accurate to 1 segment. 
     0 = > new moon. 
     4 => full moon. 
     */ 

    if (@m < 3) 
     Select @y = @y - 1, @m = @m + 12 
    Select @m = @m + 1; 

    Select @c = 365.25 * @y, @e = 30.6 * @m 
    Select @jd = @[email protected][email protected] /* jd is total days elapsed */ 
    Select @jd = @jd/29.53   /* divide by the moon cycle (29.53 days) */ 
    Select @b = convert(int, @jd)   /* int(jd) -> b, take integer part of jd */ 
    Select @jd = @jd - @b   /* subtract integer part to leave fractional part of original jd */ 
    Select @b = (@jd * 8) + 0.5 /* scale fraction from 0-8 and round by adding 0.5 */ 
    if @b = 8 
     Select @b = 0   /* 0 and 8 are the same so turn 8 into 0 */ 
    return @b 
END 

あなたは答えのJavaコードの正しい

ソースであるかどうかを確認する必要がありますので、私は、これらのものについてはあまり知らない:それは異なっていても、解決のためのhttp://www.voidware.com/moon_phase.htm

+0

感謝できます。 – epoch

+0

こんにちは、私はまだPL SQL関数がありますか?共有することはできますか?ありがとう。 – Motta

関連する問題