サーチ…


備考

MySQLは、ほとんどのマシンで、計算に64ビットIEEE 754浮動小数点演算を使用します。

整数コンテキストでは、整数演算を使用します。

  • RAND()は完全な乱数ジェネレータではありません。主に擬似乱数を素早く生成するために使用されます

算術演算子

MySQLは次の算術演算子を提供します

オペレーター
+ 添加 SELECT 3+5; →8
SELECT 3.5+2.5; - > 6.0
SELECT 3.5+2; →5.5
- 減算 SELECT 3-5; →-2
* 乗算 SELECT 3 * 5; - > 15
/ 分割 SELECT 20 / 4; →5
SELECT 355 / 113; - > 3.1416
SELECT 10.0 / 0; - > NULL
DIV 整数部 SELECT 5 DIV 2; →2
%またはMOD モジュロ SELECT 7 % 3; - > 1
SELECT 15 MOD 4 - > 3
SELECT 15 MOD -4 - > 3
SELECT -15 MOD 4 - > -3
SELECT -15 MOD -4 - > -3
SELECT 3 MOD 2.5 - > 0.5

BIGINT

算術演算の数値がすべて整数の場合、MySQLはBIGINT (符号付き64ビット)整数データ型を使用して処理を行います。例えば:

select (1024 * 1024 * 1024 * 1024 *1024 * 1024) + 1 1,152,921,504,606,846,977を選択します

そして

select (1024 * 1024 * 1024 * 1024 *1024 * 1024 * 1024BIGINT範囲外エラー

ダブル

算術演算の数値が小数点以下の場合、MySQLは64ビットIEEE 754浮動小数点演算を使用します。多くの浮動小数点数は本質的に正確な値ではなく近似値なので、浮動小数点演算を使用するときは注意が必要です

数学定数

Pi

次の例は、 PIの値を小数点以下6桁に戻します。実際の値はDOUBLE適しています。

SELECT PI();    -> 3.141593

三角法(SIN、COS)

角度は、度ではなくラジアンです。すべての計算は、 IEEE 754 64ビット浮動小数点で行われます。すべての浮動小数点計算は機械誤差(ε)と呼ばれる小さな誤差の影響を受けますので、それらを等価で比較しようとしないでください。浮動小数点使用時にこれらのエラーを回避する方法はありません。彼らは技術に組み込まれています。

DECIMAL値を三角計算で使用すると、暗黙的に浮動小数点に変換された後、小数点に戻ります。

正弦

ラジアンで表される数Xの正弦を返します。

SELECT SIN(PI()); -> 1.2246063538224e-16

余弦

Xがラジアンで与えられたときのXの余弦を返す

SELECT COS(PI()); -> -1

正接

ラジアンで表される数Xの正接を返します。結果はゼロに非常に近いが、正確にゼロではないことに注意してください。これはマシンεの例です。

SELECT TAN(PI());   -> -1.2246063538224e-16

アークコサイン(逆コサイン)

Xが範囲内であればXのアークコサインを返し-1 to 1

SELECT ACOS(1);    -> 0
SELECT ACOS(1.01); -> NULL

アークサイン(逆サイン)

Xが-1 to 1範囲にある場合、Xの逆正弦を返します。

SELECT ASIN(0.2); -> 0.20135792079033

アークタンジェント(逆タンジェント)

ATAN(x)は、単一の数値の逆正接を返します。

SELECT ATAN(2); -> 1.1071487177941

ATAN2(X, Y)は、2つの変数XとYのアークタンジェントを返します.Y / Xのアークタンジェントを計算するのと似ていますが、数値的には頑強ですATAN2(X, Y)がゼロに近く、の両方の引数を使用して、結果の象限を決定します。

可能な限り、 ATAN()ではなくATAN2()を使用する式を作成することをおATAN2()します。

 ATAN2(1,1);    -> 0.7853981633974483 (45 degrees)
 ATAN2(1,-1);   -> 2.356194490192345  (135 degrees)
 ATAN2(0, -1);  -> PI  (180 degrees)  don't try ATAN(-1 / 0)... it won't work

コタンジェント

Xのコタンジェントを返します。

SELECT COT(12); -> -1.5726734063977

変換

SELECT RADIANS(90) -> 1.5707963267948966
SELECT SIN(RADIANS(90)) -> 1
SELECT DEGREES(1), DEGREES(PI()) -> 57.29577951308232, 180

丸め(ROUND、FLOOR、CEIL)

10進数を整数値に丸めます。

正確な数値(例えばDECIMAL )の場合:数値の最初の小数点が5以上の場合、この関数は数値を0から離れた次の整数に丸めます 。その小数点以下の桁数が4以下の場合、この関数はゼロに最も近い次の整数値に丸めます

SELECT ROUND(4.51) -> 5
SELECT ROUND(4.49) -> 4
SELECT ROUND(-4.51) -> -5

近似数値(例: DOUBLE )の場合: ROUND()関数の結果はCライブラリーによって異なります。多くのシステムでは、これはROUND() が最も近い偶数のルールへのラウンドを使用することを意味します。

SELECT ROUND(45e-1) -> 4  -- The nearest even value is 4
SELECT ROUND(55e-1) -> 6  -- The nearest even value is 6

番号を切り上げる

数値をCEIL()は、 CEIL()またはCEILING()関数を使用します

SELECT CEIL(1.23)    -> 2
SELECT CEILING(4.83) -> 5

数字を切り捨てる

数値をFLOOR()には、 FLOOR()関数を使用します

SELECT FLOOR(1.99) -> 1

フロアとCEILは、 - 無限に近づく/離れる:

SELECT FLOOR(-1.01), CEIL(-1.01) -> -2 and -1
SELECT FLOOR(-1.99), CEIL(-1.99) -> -2 and -1

10進数を小数点以下の桁数に丸めます。

SELECT ROUND(1234.987, 2) -> 1234.99
SELECT ROUND(1234.987, -2) -> 1200

上向きと下向きの議論と「5」も適用されます。

数字をパワー(POW)に上げる

数値xyにするには、 POW() POWER()関数またはPOWER()関数を使用します

SELECT POW(2,2); => 4
SELECT POW(4,2); => 16

平方根(SQRT)

SQRT()関数を使用します。数値が負の場合はNULLNULL

SELECT SQRT(16); -> 4
SELECT SQRT(-3); -> NULL

乱数(RAND)

乱数を生成する

01間の擬似乱数浮動小数点数を生成するには、 RAND()関数を使用します

次のクエリがあるとします

SELECT i, RAND() FROM t;

これは次のようなものを返します

RAND()
1 0.6191438870682
2 0.93845168309142
3 0.83482678498591

範囲内の乱数

a <= n <= bの範囲の乱数を生成するには、次の式を使用できます

FLOOR(a + RAND() * (b - a + 1))

たとえば、これは7と12の間の乱数を生成します

SELECT FLOOR(7 + (RAND() * 6));

テーブル内の行をランダムに返す簡単な方法は次のとおりです。

SELECT * FROM tbl ORDER BY RAND();

これらは擬似乱数です。

MySQLの擬似乱数生成器は、暗号的に安全ではありません。つまり、MySQLを使用して秘密として使用する乱数を生成すると、MySQLを使用していることを知っている決定的な敵は、信じるよりも簡単に秘密を推測することができます。

絶対値と符号(ABS、SIGN)

数値の絶対値を返す

SELECT ABS(2);   -> 2
SELECT ABS(-46); -> 46

数字のsignは0と比較されます。

符号結果
-1 n <0 SELECT SIGN(42); - > 1
0 n = 0 SELECT SIGN(0); →0
1 n> 0 SELECT SIGN(-3); - > -1
SELECT SIGN(-423421); -> -1


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow