postgresql 星座 函数

分类

SQL

星座切换日期根据不同年份会有不同 前后有一两天差异。实际上星座的切换时间就是24节气中气的切换时间。


CREATE FUNCTION xingzuo(date)
  RETURNS character varying
LANGUAGE plpgsql
AS $$
DECLARE
  date_month INT;
  date_date  INT;
  xingzuo    VARCHAR;
BEGIN
  date_month := extract(MONTH FROM $1);
  date_date := extract(DAY FROM $1);
  CASE date_month
    WHEN 3
    THEN
      IF date_date > 20
      THEN
        xingzuo := '白羊';
      ELSE
        xingzuo := '双鱼';
      END IF;
    WHEN 4
    THEN
      IF date_date > 21
      THEN
        xingzuo := '金牛';
      ELSE
        xingzuo := '白羊';
      END IF;
    WHEN 5
    THEN
      IF date_date > 20
      THEN
        xingzuo := '双子';
      ELSE
        xingzuo := '金牛';
      END IF;
    WHEN 6
    THEN
      IF date_date > 20
      THEN
        xingzuo := '巨蟹';
      ELSE
        xingzuo := '双子';
      END IF;
    WHEN 7
    THEN
      IF date_date > 22
      THEN
        xingzuo := '狮子';
      ELSE
        xingzuo := '巨蟹';
      END IF;
    WHEN 8
    THEN
      IF date_date > 22
      THEN
        xingzuo := '处女';
      ELSE
        xingzuo := '狮子';
      END IF;
    WHEN 9
    THEN
      IF date_date > 22
      THEN
        xingzuo := '天平';
      ELSE
        xingzuo := '处女';
      END IF;
    WHEN 10
    THEN
      IF date_date > 22
      THEN
        xingzuo := '天蝎';
      ELSE
        xingzuo := '天平';
      END IF;
    WHEN 11
    THEN
      IF date_date > 21
      THEN
        xingzuo := '射手';
      ELSE
        xingzuo := '天蝎';
      END IF;
    WHEN 12
    THEN
      IF date_date > 21
      THEN
        xingzuo := '摩羯';
      ELSE
        xingzuo := '射手';
      END IF;
    WHEN 1
    THEN
      IF date_date > 19
      THEN
        xingzuo := '水瓶';
      ELSE
        xingzuo := '摩羯';
      END IF;
    WHEN 2
    THEN
      IF date_date > 18
      THEN
        xingzuo := '双鱼';
      ELSE
        xingzuo := '水瓶';
      END IF;
  END CASE;
  RETURN xingzuo;
END;
$$;