• 締切済み

関数の戻り値の確認について

accessで関数を使用していました sqlserverでのスカラ値関数を設定しましたが戻り値を確認したいのですがprintを記述すると関数の中では使用できませんとエラーになってしまいます?戻り値を確認する方法はないでしょうか じつは下記ストアドから関数を呼び出して結果をテーブルにインサートすると小数点以下のデータが消えています?そこで戻り値が正しいか確認したいのです。accessの場合には少数以下正常に出ます なにかprgの記述がまちがっているのでしょうかご指導おねがいします ----INSERT INTO ストアド----Sum(dbo.scfc_残業時間([残業H])) AS 残業Z----GROUP BY ****---- ------スカラ値関数---dbo.scfc_残業時間---------------------------- set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go ALTER FUNCTION [dbo].[scfc_残業時間] ( @ZAN nvarchar(5)) RETURNS real AS BEGIN DECLARE @ZANGYOU int DECLARE @ZANGYOU_H real if (not(@ZAN is null)) if len(@ZAN)= 4 SET @ZANGYOU = convert(int,LEFT(@ZAN,1))*60 + convert(int,substring(@ZAN,3,2))*1 ELSE SET @ZANGYOU = convert(int,LEFT(@ZAN,2))*60 + convert(int,substring(@ZAN,4,2))*1 ELSE SET @ZANGYOU= 0 IF @ZANGYOU > 0 SET @ZANGYOU_H = floor(@ZANGYOU/60*10000)/10000 RETURN @ZANGYOU_H END

みんなの回答

回答No.1

print 1/60 print cast(1 as real)/60 のちがいかと。 「暗黙の変換」でBOOKSONLINEを検索するとそのあたり出てくるかと思います。

hiyotom
質問者

お礼

ありがとうございました 今日いろいろやってみてintをrealに変更したら小数点まででるようになりました 戻り値のほうはご指摘のようにprint記述してみます

関連するQ&A

  • SQLserverのIF文について

    どうしてもIF文がうまくいきません IF文の中にIFを入れ子していますそのIFが複数の条件があります 今までACCESSではELSEIFで条件をいくらでも指定できたのですがSQLの場合はエラーになってしまいます ご教授おねがいします ------------------------------ set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go ALTER FUNCTION [dbo].[scfc_part端数処理] ( @PTHASU nvarchar(10), @haken nvarchar(10) ) RETURNS real AS BEGIN DECLARE @PARTT real DECLARE @PARTT_H real if (not(@PTHASU is null)) if @haken='派遣' or @haken='臨時' if substring(@PTHASU,4,2)>= 50 SET @PARTT = convert(int,LEFT(@PTHASU,2)+1)*60 --ここをいれるとエラー IF substring(@PTHASU,4,2)< 50 and substring(@PTHASU,4,2)>= 20 --ここをいれるとエラー SET @PARTT = convert(int,LEFT(@PTHASU,2)*60 +30 --ここをいれるとエラー if substring(@PTHASU,4,2)< 20 --ここをいれるとエラー SET @PARTT = convert(int,LEFT(@PTHASU,2)*60 ELSE SET @PARTT = convert(real,LEFT(@PTHASU,2))*60 + convert(real,substring(@PTHASU,4,2))*1 ELSE SET @PARTT= 0 SET @PARTT_H = convert(real,(floor(@PARTT/60*10000)/10000)) RETURN @PARTT_H END

  • 戻り値を返す関数の前に(void)を付ける

    今日会社で 変数 = (void)戻り値のある関数 #具体的な例としては下記一例を参照 と、ソースで書かれているものがあったのですが、 コメント等では、 「戻り値を明示しないときに(void)を付けて使用する」 と、書いてあります。 戻り値のある関数の前で(void)を付けると、戻り値が明示されなくなるのでしょうか?? または、このような動作にはならないのでしょうか。 自分自身、ソースの内容をうる覚えになっておりますので、 確認をしながらアップしていきたいと思いますので、 宜しくお願い致します。 /*一例*/ ・num1とnum2を足した値を返す int PlusPoint(int num1 , num2); ・PlusPointの値を格納する int Sum ◇ソース◆ #include <stdio.h> #include "Plus.h" int main(void) { int Sum; Sum = (void)PlusPoint; if(Sum == 2) { printf("false"); exit(0); } printf("true"); return 0; } *PlusPoint関数は外部で定義されている *プロトタイプ宣言はPlus.hに定義されいるものとする

  • scanf関数の戻り値について

    --------------------------------------- #include<stdio.h> int main(void) { int dt; while(scanf("%d",&dt)==1){ if(dt==0){ printf("0は入力しないでください\n"); puts(""); } else if(dt<0){ dt=-dt; printf("入力値の絶対値は「%d」です\n",dt); puts(""); } else{ printf("入力値の絶対値は「%d」です\n",dt); puts(""); } } return 0; } --------------------------------------- 以上のプログラムについて疑問があります。 scanf関数の戻り値が1の間、繰り返すというもので、入力の時に整数入力ですが、あえて実数である1.1を入れたとします。 scanfの戻り値は1で、dtには整数部の1だけ設定されていたので、これでもうまくいくのかと思ったのですが、次の入力はscanfの戻り値が0になっていて出来ませんでした。 何故0になっているのかわかりません。 入力バッファに何か残ってしまっているということなのでしょうか? 以上教えていただけると嬉しいです。

  • AccessとSqlServer

    いまだ、Accessプロジェクトを利用しているものです。 SqlServerにユーザー定義関数(スカラ値関数)があり、Access(adp)からそのユーザー定義関数に、フォーム上のコントロール値をパラメータとして渡し、その戻り値をAccessで受け取りたいのですが、そのやり方で躓いています。   例 SqlServerのユーザー定義関数      Alter Function dbo.Total (@Para1 int,@Para2 int) Returns int As Begin Declare @Total int End BEGIN @Total = Para1 + Para2 Teturn(@Total) End      とし、      AccessのForm1のテキストボックス1、2をパラメータとして、テキストボックス3      に、SqlServerのユーザー定義関数の戻り値「@Total」を表示させたいと望んでいる     のですが。      お知恵を借りたく、質問させていただきました。

  • 戻り値について

    プログラミング初心者です。 よろしくお願いします。 C++を使っています。 早速なのですが、以下にプログラムを記載します。 ◎1---------------------------------------- #include<stdio.h> main() { char ss[256]; gets(ss); puts(ss); } ---------------------------------------- ◎1を実行すると、「型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません」と表示されます。 参考書には、「戻り値のvoidがないと勝手に戻り値の関数をint型と解釈する。関数の宣言と定義が合わないとコンパイル時にエラーとなる」とあったのですが、 ◎2------------------------------------- #include<stdio.h> int main() { char ss[256]; gets(ss); puts(ss); } ------------------------------------- 以上の◎2だと、なぜ実行出来るかよくわかりません。 本当に初心者的な質問ですいませんが、教えていただけると嬉しいです。

  • 関数の戻り値について

    ----test.c----------------- id="0001"; number = get_data(id); /* 関数の戻り値を取得したい */ if(strcmp(number, "01") == 0){ /* Aの処理へ */ }else{ /* Bの処理へ */ } ----test.pc---------------- int get_data(char* id){ EXEC SQL BEGIN DECLARE SECTION; VARCHAR tel_no[3]; VARCHAR id_no[5]; EXEC SQL END DECLARE SECTION; strcpy(id_no.arr,id); id_no.len=strlen(id_no.arr); EXEC SQL SELECT tel_number into :tel_no FROM test_tbl WHERE id=:id_no; tel_no.arr[tel_no.len]='\0'; /*取得したtel_noを返したい!!*/ } --------------------------- test.cで引数に"0001"を指定して、get_data関数を コールして、そのget_data関数で受け取った引数で test_tblを検索しtel_numberフィールドの値を test.cに返し、判断文で処理したいと考えています。 ちなみにtest_tblで引数の条件で合致するデータは 必ず1件のみとします。 どのように記述したらいいかわかりません。 アドバイスお願い致します。m(_ _)m

  • C言語 exitで終了した関数の戻り値

    引数が負の整数であればエラーを表示し終了、0以上の整数であればそのまま戻り値とする関数 int example(int a) { if( a < 0 ) { printf("Error!\n");   exit(1); } return(a); } があったとします。 ここでたとえば  int s1,s2; に対して、 s1 = example(3); とすれば、 s1 = 3 となりますが、 s2 = example(-5); とすれば、 s2 には何が代入されているのでしょうか? 例に書いた関数はしょーもないものですが、 もう少し難しい関数を使って変数に値を入れて、その値で後でfor文などを使って仕分けていくようにしたいのですが、エラー時に代入されるものがわからなくて困っています。 エラー時のみに目印となる値、たとえば -1 などを戻り値とすることはできません。 おねがいします。

  • 配列を関数の戻り値にする

    こんにちは、質問があります。 ラベルに関数の戻り値を表示させたいのですが うまくいきません。 良い解決方法ご存知の方いらっしゃいませんか? よろしくお願いします。 ============================================================== import java.awt.*; import javax.swing.*; class Set { int hairetsu[]=new int[3]; int[] dainyuu() { hairetsu[0]=100; hairetsu[1]=200; hairetsu[2]=300; return hairetsu; } } class return_test { String tensuu[]; public static void main(String[] args) { JFrame frame=new JFrame("確認"); JPanel panel=new JPanel(); Set ret=new Set(); tensuu=ret.dainyuu(); JLabel label=new JLabel(tensuu); panel.add(label); Container ct=frame.getContentPane(); ct.add(panel); frame.setVisible(true); frame.pack(); } }

    • ベストアンサー
    • Java
  • T-SQL ユーザ定義関数 指定したバイト数までの文字列を返したい

    お世話になります。 SQLserver2005でユーザー定義関数に初めてトライしているのですが デバッグツールがなく、うまく動かない理由がわからず困っております。 ある文字列に対して、指定したバイト数までの文字を返すような関数を作りたいです。VBAでいうLEFT関数のバイト数指定版というのでしょうか。(すでにそんな関数があったりして。。) 以下のように作ってみたのですが、無限ループのようで、いつまでたってもデータが返ってきません。。どなたか教えていただけませんでしょうか? set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go CREATE FUNCTION [dbo].[LeftByte] (@value nvarchar,@maxbyte bigint) RETURNS nvarchar(max) AS BEGIN declare @Countvalue as bigint declare @byte as bigint declare @result as nvarchar select @byte = 0 select @Countvalue = 0 select @result = '' while @byte < @maxbyte begin select @Countvalue = (@Countvalue + 1) select @result = (left(@value,@Countvalue)) select @byte = (datalength(@result)) if @byte >= @maxbyte break else continue end RETURN @result END 宜しくお願い致します。

  • ACCESS Viewでユーザー定義関数を使いたい

    ACCESS2000+MSDEで開発をしていますが、Viewの中でユーザ定義関数を使用したいのですが、できません。 1> create function dbo.count1(@linkNo int) 2> returns int 3> as 4> 5> begin 6> declare @cnt int 7> 8> select @cnt = count(*) from dbo.TBL_OA where [link] = @linkNO 9> 10> return @cnt 11> end 12> go 1> select dbo.count1(100) 2> go ----------- 1 (1 件処理されました) ここまでは上手く行くのですが、 ACCESS側でViewの列へ count1(100)と記述すると 「ADOエラー:'count1'は関数名として認識されません。」 とエラーになってしまいます。 方法は問いませんが、Viewの中でユーザー定義関数が使用できる方法、ご存知の方いらっしゃいましたら、よろしくお願いします。