نحوه راه اندازی گوشی های هوشمند و رایانه های شخصی. پرتال اطلاعاتی

توابع داخلی اوراکل.

حالا بیایید ویژگی های کار با تابع را بررسی کنیم TO_CHAR()در رابطه با تبدیل، اعداد. هنگام انجام این عملیات، تابع دارای نحو زیر است:

TO_CHAR(شماره، [، قالب[، nls_parameter]])

در همان زمان، تابع TO_CHAR()نوع را تبدیل می کند عدددر هر نوع VARCHAR2. جدول نشان می دهد که کدام فرمت ها در دسترس هستند و چگونه از آنها در تبدیل استفاده می شود:

عنصر فرمتیک رشته نمونه از این قالبشرح
9 99 هر رقم 9 نشان دهنده یک رقم قابل توجه از نتیجه است. عدد ارقام قابل توجهمقدار بازگشتی برابر است با تعداد ارقام 9، معنی منفیقبل از علامت منفی همه صفرهای ابتدایی با فاصله جایگزین می شوند.
0 0999 عددی را با صفرهای ابتدایی، نه فاصله، برمی‌گرداند.
0 9990 عددی را با صفرهای انتهایی، نه فاصله، برمی‌گرداند.
$ $999 قبل از ارزش بازگشتی یک علامت دلار وجود دارد، صرف نظر از نماد ارز استفاده شده، می تواند با صفرهای پیشرو یا انتهایی استفاده شود.
بB999فاصله ها به جای قسمت صحیح صفر عدد اعشاری برگردانده می شوند.
MI999MIیک عدد منفی را با علامت منفی در پایان به جای ابتدا برمی‌گرداند. در یک ارزش مثبت، فضایی در این مکان وجود خواهد داشت.
اسS9999قبل از عدد برگشتی یک علامت وجود دارد: + برای مثبت، اعداد - برای منفی.
اس9999Sعدد برگشتی با یک علامت به پایان می رسد: + برای مثبت، اعداد - برای منفی.
روابط عمومی99 PRیک عدد منفی را در پرانتز برمی‌گرداند "<", ">". اعداد مثبت، فضاهای این مکان.
دی99D9عددی را با نقطه اعشار در موقعیت مشخص شده برمی‌گرداند. عدد 9 در دو طرف نشان می دهد حداکثر تعدادارقام
جی9G999شماره جدا شده از گروه را در موقعیت مشخص شده برمی گرداند. جی
سیC99عددی را با نماد ارز ISO در موقعیت مشخص شده برمی گرداند. سیممکن است بیش از یک بار در رشته فرمت مشخص شده ظاهر شود.
LL999عددی را با نماد پول ملی در موقعیت مشخص شده برمی گرداند.
, 999,999 بدون توجه به جداکننده گروه انتخابی، نقطه ویرگول را در موقعیت مشخص شده برمی گرداند.
. 99.99 بدون توجه به جداکننده اعشاری انتخابی، عددی را با یک نقطه اعشار در موقعیت مشخص شده برمی‌گرداند.
V99V999عدد ضرب شده در را برمی‌گرداند 10n، جایی که nتعداد 9 رقم بعد از V است. در صورت لزوم مقدار گرد می شود.
EEEE9.99EEEEعددی را با نماد علمی برمی‌گرداند.
RMRMیک عدد را با استفاده از اعداد رومی بزرگ برمی گرداند.

به عنوان مثال، در اینجا یک بلوک وجود دارد:

SET SERVERoutputut ON BEGIN -- تابع TO_CHAR() -- DBMS_OUTPUT.put_line(TO_CHAR(534523)); -- تابع TO_CHAR() -- DBMS_OUTPUT.put_line(TO_CHAR(34387، "99999")); -- تابع TO_CHAR() -- DBMS_OUTPUT.put_line(TO_CHAR(5000، "9999$")); -- تابع TO_CHAR() -- DBMS_OUTPUT.put_line(TO_CHAR(-9، "9S")); -- تابع TO_CHAR() -- DBMS_OUTPUT.put_line(TO_CHAR(-34، "S99")); -- تابع TO_CHAR() -- DBMS_OUTPUT.put_line(TO_CHAR(3 - 5، "999MI")); -- تابع TO_CHAR() -- DBMS_OUTPUT.put_line(TO_CHAR(7 - 3، "S9")); -- تابع TO_CHAR() -- DBMS_OUTPUT.put_line(TO_CHAR(4 - 5، "99PR")); -- تابع TO_CHAR() -- DBMS_OUTPUT.put_line(TO_CHAR(8900، "L9999")); -- تابع TO_CHAR() -- DBMS_OUTPUT.put_line(TO_CHAR(10000000، "9.9EEEE")); -- تابع TO_CHAR() -- DBMS_OUTPUT.put_line(TO_CHAR(10، "RM")); -- تابع TO_CHAR() -- DBMS_OUTPUT.put_line(TO_CHAR(105، "RM")); پایان؛ /

پس از اجرا می گیریم:

SQL> BEGIN 2 3 -- تابع TO_CHAR() -- 4 DBMS_OUTPUT.put_line(TO_CHAR(534523)); 5 6 -- تابع TO_CHAR() -- 7 DBMS_OUTPUT.put_line(TO_CHAR(34387، "99999")); 8 9 -- تابع TO_CHAR() -- 10 DBMS_OUTPUT.put_line(TO_CHAR(5000، "9999$")); 11 12 -- تابع TO_CHAR() -- 13 DBMS_OUTPUT.put_line(TO_CHAR(-9، "9S")); 14 15 -- تابع TO_CHAR() -- 16 DBMS_OUTPUT.put_line(TO_CHAR(-34، "S99")); 17 18 -- تابع TO_CHAR() -- 19 DBMS_OUTPUT.put_line(TO_CHAR(3 - 5، "999MI")); 20 21 -- تابع TO_CHAR() -- 22 DBMS_OUTPUT.put_line(TO_CHAR(7 - 3، "S9")); 23 24 -- تابع TO_CHAR() -- 25 DBMS_OUTPUT.put_line(TO_CHAR(4 - 5، "99PR")); 26 27 -- تابع TO_CHAR() -- 28 DBMS_OUTPUT.put_line(TO_CHAR(8900، "L9999")); 29 30 -- تابع TO_CHAR() -- 31 DBMS_OUTPUT.put_line(TO_CHAR(10000000، "9.9EEEE")); 32 33 -- تابع TO_CHAR() -- 34 DBMS_OUTPUT.put_line(TO_CHAR(10، "RM")); 35 36 -- تابع TO_CHAR() -- 37 DBMS_OUTPUT.put_line(TO_CHAR(105، "RM")); 38 39 END; 40 / 534523 34387 5000 $ 9- -34 2- +4 p.8900 1.0E+07 X CV PL/SQL رویه با موفقیت انجام شد.

و برای کامل بودن، اجازه دهید تابع را در نظر بگیریم TO_NUMBER()، زیرا با TO_CHAR()آنها عملا دوقلو هستند، اما در دو طرف مخالف. نحو y TO_NUMBERبعد:

TO_NUMBER (رشته، [، قالب [، nls_option]])

AT این مورد"رشته" یک نوع است CHARیا VARCHAR2، که با اعمال "قالب" به نوع تبدیل می شود عدد. "قالب" در این تابع، مانند for TO_CHAR(). به اندازه کافی ساده است. و اگر در مثال قبلی مثلاً خط سوم را از پایین به این صورت تغییر دهیم:

DBMS_OUTPUT.put_line(TO_CHAR(TO_NUMBER("10000000"، "9.9EEEE")، "9.9EEEE"));

در مقاله قبلی، توابع داخلی کار با رشته ها را بررسی کردیم. در این مقاله ما صحبت خواهیم کرددر مورد توابع کار با تاریخ/زمان و توابع تبدیل انواع برای تاریخ. Oracle نوع خاصی از DATE را برای ذخیره تاریخ و زمان ارائه می دهد. با نقطه فیزیکیآن را مشاهده کنید عدد کسری, کل بخشکه تعداد روزها از تاریخ پایه را ذخیره می کند و کسری زمان را ذخیره می کند. این به شما این امکان را می‌دهد که روی تاریخ‌ها متعهد شوید عملیات حسابی- جمع و تفریق.

تابع SYSDATE

این یکی از پر استفاده ترین توابع است، تاریخ و زمان فعلی را مطابق با ساعت سرور برمی گرداند.

تابع LAST_DAY(d).

آخرین روز ماه مشخص شده در تاریخ d را برمی گرداند.

SELECT SYSDATE d،

LAST_DAY (SYSDATE) d1

تابع MONTHS_BETWEEN(d1, d2)

تابع MONTH_BETWEEN تعداد ماه های بین دو تاریخ d1 و d2 را که به صورت d1-d2 امضا شده اند، برمی گرداند، عدد برگشتی یک کسری است.

SELECT MONTHS_BETWEEN("2.09.2006", "2.05.2006") d1,

MONTHS_BETWEEN("09/12/2006"، "05/2/2006") d2،

MONTHS_BETWEEN("2.05.2006"، "12.09.2006") d3

در نظر گرفتن نمونه های معمولی- تاریخ را به ساعت، روز، ماه و سال کوتاه کنید. ماسک فرمت پیش فرض "DD" است

SYSDATE d1 را انتخاب کنید،

TRUNC(SYSDATE، "HH24") d2،

TRUNC(SYSDATE، "DD") d3،

TRUNC(SYSDATE، "MM") d4،

TRUNC(SYSDATE، "YYYY") d5

قالب‌بندی ماسک‌ها برای توابع TRUNC و ROUND معتبر است

بیایید نگاهی دقیق تر به ماسک های فرمت و ویژگی های استفاده از آنها بیندازیم.

ماسک

هدف

اولین روز قرن

YEAR یا YYYY یا YY یا Y

اولین روز سال

روز اول سه ماهه

MONTH یا MON یا MM

روز اول ماه

همان روز هفته با اولین روز سال جاری

همان روز هفته با روز اول ماه جاری

DAY یا DY یا D

روز اول هفته

HH یا HH12 یا HH24

تابع TO_DATE (str[,mask [,nls_lang]])

تابع TO_DATE رشته رشته را به تاریخ تبدیل می کند. اگر مشخص شده باشد، تغییر شکل طبق ماسک ماسک انجام می شود. اگر ماسک مشخص نشده باشد، ماسک پیش فرض گرفته می شود. اگر یک ماسک را مشخص کنید، می توانید یک پارامتر دیگر را مشخص کنید - زبانی که هنگام قالب بندی نام ماه ها و روزها استفاده می شود. در صورت بروز خطا در تجزیه رشته رشته مطابق با ماسک مشخص شده، استثنا. رایج ترین خطا "ORA-01830: الگوی قالب تاریخ قبل از تبدیل کل رشته ورودی کامل می شود" است. علاوه بر این، خطای "ORA-01821: فرمت تاریخ شناسایی نشد" غیر معمول نیست - زمانی رخ می دهد که یک ماسک فرمت نامعتبر مشخص شده باشد.

SELECT TO_DATE("09/12/2006") d

قالب‌بندی ماسک‌ها برای توابع TO_CHAR در صورت قالب‌بندی تاریخ معتبر است

یک قرن، با علامت منفی قبل از تاریخ ق.م.

SYSDATE d1 را انتخاب کنید،

TO_CHAR (SYSDATE-1000000، "SCC") d2

26.09.2006 17:14:21

SYSDATE d1 را انتخاب کنید،

TO_CHAR (SYSDATE، "YYYY") d2

سال نوشته شده در کلمات با در نظر گرفتن زبان ملی فعلی.

SYSDATE d1 را انتخاب کنید،

TO_CHAR (SYSDATE، "YEAR") d2

SYSDATE d1 را انتخاب کنید،

TO_CHAR (SYSDATE، "MM") d2

نام ماه به زبان

SYSDATE d1 را انتخاب کنید،

TO_CHAR (SYSDATE، "MONTH") d2

هفته از سال

SYSDATE d1 را انتخاب کنید،

TO_CHAR (SYSDATE، "WW") d2

روز سال.

SYSDATE d1 را انتخاب کنید،

TO_CHAR (SYSDATE، "DDD") d2

روز هفته با کلمات، در صورت لزوم به 9 کاراکتر با فاصله اضافه می شود.

SYSDATE d1 را انتخاب کنید،

TO_CHAR (SYSDATE، "DAY") d2

تاریخ تقویم جولیان تعداد روزهای 01/01/4712 ق.م است.

SYSDATE d1 را انتخاب کنید،

TO_CHAR (SYSDATE، "J") d2

ساعت از روز در مقیاس 12 ساعته (1-12).

SYSDATE d1 را انتخاب کنید،

TO_CHAR (SYSDATE، "HH") d2

دقایق (0-59).

SYSDATE d1 را انتخاب کنید،

TO_CHAR (SYSDATE، "MI") d2

این ماسک فرمت برای اندازه گیری فواصل زمانی در ثانیه مفید است.

علائم نگارشی آنها به مکان های مناسب در تاریخ فرمت شده خروجی می شوند.

SYSDATE d1 را انتخاب کنید،

TO_CHAR (SYSDATE، "DD.MM.YYYY HH24.MI") d2،

TO_CHAR (SYSDATE، "DD/MM/YYYY HH12.MI PM") d3

عناصر ماسک قالب بندی که برای نمایش اطلاعات متنی در نظر گرفته شده اند به حروف بزرگ و کوچک حساس هستند - حروف کوچک و بزرگ متن قالب بندی شده را کنترل می کند. مدیریت ثبت نام را با استفاده از ماسک فرمت DAY به عنوان مثال در نظر بگیرید:

SYSDATE d1 را انتخاب کنید،

TO_CHAR (SYSDATE، "DAY") d2،

TO_CHAR (SYSDATE، "روز") d3،

TO_CHAR (SYSDATE، "روز") d4

26.09.2006 17:47:45

به راحتی می توان فهمید که اگر ماسک با حروف بزرگ نوشته شده باشد، فرمت شده است مقدار متنبا حروف بزرگ برمی گرداند اگر در پایین باشد - مقدار قالب بندی شده نیز در پایین خواهد بود. و در نهایت نوشتن ماسک با حرف بزرگباعث می شود متن تولید شده طوری قالب بندی شود که با یک حرف بزرگ شروع شود.

نتیجه

در این مقاله، تمام قسمت های داخلی اصلی را پوشش داده ایم توابع اوراکل، برای کار با تاریخ و انجام عملیات تبدیل نوع با نوع "تاریخ" طراحی شده است. در مقاله بعدی، به توابع تبدیل و قالب بندی اعداد نگاه می کنیم و به پرس و جوهای عملی می رویم که از توابعی که قبلاً بحث شد استفاده می کنند.

برای ساده‌تر کردن کار با رشته‌ها، تعدادی توابع داخلی وجود دارد که عملیات‌هایی مانند تبدیل رشته‌ها به داده‌های انواع دیگر، یافتن زیررشته در یک رشته، تعیین طول یک رشته و غیره را بسیار تسهیل می‌کنند. در این مقاله ما رایج ترین توابع کار با رشته ها را در نظر می گیرد.

1) تابع تعیین طول یک رشته LENGTH (رشته)، تعداد کاراکترهای یک رشته، از جمله فاصله های انتهایی را برمی گرداند.

SELECT LENGTH('string') FROM DUAL مقدار 7 را برمی گرداند.

2) توابع برای تبدیل رجیسترهای کاراکتر UPPER (رشته)، LOWER (رشته)، INITCAP (رشته). تابع UPPER() برای تبدیل کاراکترها به حروف بزرگ استفاده می شود.

SELECT UPPER('string') FROM DUAL STRING را برمی گرداند.

در صورت نیاز به تبدیل کاراکترهای یک رشته به حروف کوچکتابع LOWER() استفاده می شود.

SELECT LOWER('STring') FROM DUAL رشته را برمی گرداند.

تابع INITCAP هر کاراکتر اول یک کلمه را به حروف بزرگ و تمام کاراکترهای دیگر را به حروف کوچک تبدیل می کند، مشروط بر اینکه کاراکتر جداکننده بین کلمات یک فاصله باشد.

SELECT INITCAP('string1 string2') FROM DUAL رشته String1 String2 را برمی گرداند.

3) عملکردهایی برای کوتاه کردن فضاهای پیشرو و انتهایی LTRIM (رشته)، RTRIM (رشته)، TRIM (رشته). بر این اساس، تابع اول تمام فضاهای اولیه رشته، تابع دوم تمام فضاهای انتهایی و تابع سوم تمام فضاهای ابتدایی و انتهایی را برش می دهد.

SELECT LTRIM(' str1') FROM DUAL رشته str1 را برمی گرداند،
SELECT RTRIM('str2') FROM DUAL رشته str2 را برمی گرداند،
SELECT TRIM('str3') FROM DUAL رشته str3 را برمی گرداند.

4) تابع جایگزینی بخشی از یک رشته با رشته دیگر REPLACE (رشته_اصلی، رشته فرعی جایگزین شود، رشته فرعی جایگزین شود). برای وضوح بیشتر، مثالی را در نظر بگیرید، یک عدد در قسمتی از متن جدول ذخیره می شود. علاوه بر این، کاراکتر جداکننده بین عدد صحیح و قسمت کسریدر برخی از فیلدها "."، و برای پردازش بیشتر داده ها باید در همه فیلدها "" باشد. برای این ما استفاده می کنیم تابع REPLACEبه روش زیر. REPLACE (فیلد1، '.'، '،') و همه "." در قسمت فیلد با نماد "،" جایگزین می شود.

SELECT REPLACE('My_string','_','@') FROM DUAL یک رشته را برمی گرداند [ایمیل محافظت شده]

5) توابع برای تبدیل داده ها به انواع داده های دیگر. TO_CHAR (عدد) یک عدد را به متن تبدیل می کند. TO_NUMBER (رشته) متن را به عدد تبدیل می کند. TO_DATE (رشته، فرمت تاریخ) یک رشته را به تاریخ با فرمت مشخص شده تبدیل می کند.

SELECT TO_CHAR(123) FROM DUAL ردیف 123 را برمی گرداند،
SELECT TO_NUMBER('12345') FROM DUAL شماره 12345 را برمی گرداند،
SELECT TO_DATE('01.01.2010','dd.mon.yyyy') FROM DUAL تاریخ 01.JAN.2010 را برمی گرداند.

6) تابع برای تعیین وقوع یک زیر رشته در یک رشته INSTR (رشته_منبع، رشته فرعی، عدد_کاراکتر). این تابع به شما امکان می دهد شماره کاراکتر را در آن تعیین کنید خط منبعکه زیر رشته مورد نیاز از آن شروع می شود (در صورت وجود). در غیر این صورت، 0 برگردانده می شود، به عنوان مثال، ما باید تمام موقعیت های جدول Table1 را تعیین کنیم، که در نام آن زیر رشته "manager" وجود دارد. عملگر زیر برای این کار کاملا مناسب است.

SELECT * از TABLE1 WHERE INSTR(POST، 'مدیر'، 1) > 0.

یعنی عبارت SELECTفقط آن رکوردها را از جدول TABLE1 نشان می دهد که زیر رشته جستجو شده "manager" در آن یافت می شود. علاوه بر این، جستجو از شخصیت اول انجام می شود. اگر قرار است جستجو از موقعیت دیگری انجام شود، شماره کاراکتر برای شروع جستجو در پارامتر سوم مشخص می شود.

SELECT INSTR('Small string', 'string', 1) FROM DUAL مقدار 7 را برمی گرداند.
SELECT INSTR('Small string', 'String', 1) FROM DUAL مقدار 0 را برمی گرداند.

7) تابع استخراج زیر رشته SUBSTR (رشته_منبع، تعداد_نماد_اولیه، تعداد_کاراکترها) در رشته منبع. بیایید چنین مثالی را در نظر بگیریم، در جدول کاربر آدرس به شکل نام شهرک، نام خیابان، شماره خانه ذخیره می شود. علاوه بر این، ما با اطمینان می دانیم که به طور دقیق 20 کاراکتر برای نام شهرک اختصاص داده شده است (اگر نام شهرک کمتر از 20 کاراکتر باشد، بقیه با فاصله پر می شود)، برای نام خیابان 30 کاراکتر، برای کاراکتر خانه شماره 3 در مرحله بعد، باید تمام آدرس ها را از جدول خود به دیگری منتقل کنیم و در عین حال، هر 3 جزء آدرس باید در فیلدهای مختلف باشد. برای استخراج اجزای آدرس، از تابع ()SUBSTR استفاده می کنیم.

SELECT SUBSTR(TABLE_1.ADDRESS, 1, 20) CITY, SUBSTR(TABLE_1.ADDRESS, 21, 30) STREET, SUBSTR(TABLE_1.ADDRESS, 52, 3) TOWN FROM TABLE_1

البته برای انتقال داده ها باید از دستور INSERT استفاده کنید اما مثال در نظر گرفته شده برای درک عملکرد تابع SUBSTR کاملا مناسب است.
SELECT SUBSTR('My_string', 4, 3) FROM DUAL رشته رشته را برمی گرداند.

توابع مورد بحث در بالا را می توان در پارامترهای ورودی استفاده کرد. بنابراین اگر بخواهیم همه کاراکترها را بعد از یک کاراکتر مشخص انتخاب کنیم، می توان تعداد کاراکتر مورد نظر را از تابع INSTR به تابع SUBSTR منتقل کرد. به عنوان مثال، اگر شما نیاز به انتقال تمام کاراکترهای فیلد جدول دارید که بعد از "" قرار دارند، می توانید از این ساختار استفاده کنید.
SUBSTR(رشته_من، INSTR(رشته_من، '،'، 1)، LENGTH(رشته_من)- INSTR(رشته_من، '،'، 1)+1) FROM DUAL.
برای تعیین کاراکتر شروع، تابع INSTR() را فراخوانی می کنیم که شماره کاراکتر اولین رخداد زیررشته های "," را برمی گرداند. در مرحله بعد، تعداد کاراکترهای انتهای رشته را به عنوان تفاوت بین طول رشته و تعداد اولین وقوع رشته فرعی تعریف می کنیم.

8) برای تعیین کد کاراکتر از تابع ASCII(string) استفاده می شود که کد 1 کاراکتر رشته را برمی گرداند. مثلا

SELECT ASCII(W) FROM DUAL مقدار 87 را برمی گرداند.

9) تابع معکوستبدیل کد کاراکتر به کاراکتر CHR (تعداد).

SELECT CHR(87) FROM DUAL کاراکتر W را برمی گرداند.

توابع کار با اعداد در اوراکل.

AT DBMS Oracleتعدادی توابع برای کار با اعداد وجود دارد. اینها شامل توابع افزایش یک عدد به توان POWER()، گرد کردن ROUND() و غیره است.

1) تابع ABS(number) مقدار مطلق آرگومان را برمی گرداند.
SELECT ABS(-3) FROM DUAL مقدار 3 را برمی گرداند.

2) تابع CEIL(number) کوچکترین عدد صحیح بزرگتر یا مساوی با پارامتر ارسال شده را برمی گرداند.
SELECT CEIL(4.5) FROM DUAL مقدار 5 را برمی گرداند.

3) تابع FLOOR(number) بزرگترین عدد صحیح کمتر یا مساوی با پارامتر ارسال شده را برمی گرداند.
SELECT FLOOR(3.8) FROM DUAL مقدار 3 را برمی گرداند.

4) تابع MOD(number_1, number_2) باقیمانده تقسیم پارامتر اول بر پارامتر دوم را برمی گرداند.
SELECT MOD(5, 3) FROM DUAL 2 برمی گردد. توجه داشته باشید. اگر پارامتر دوم 0 باشد، تابع اولین پارامتر را برمی گرداند.

5) تابع گرد کردن ROUND (شماره_1، شماره_2). آرگومان اول را به تعداد ارقام ارسال شده در آرگومان دوم گرد می کند. اگر پارامتر دوم مشخص نشده باشد، آن را برابر با 0 می گیریم، یعنی گرد کردن به یک مقدار صحیح انجام می شود. مثال ها
SELECT ROUND(101.34) FROM DUAL مقدار 101 را برمی گرداند،
SELECT ROUND(100.1268, 2) FROM DUAL 100.13 را برمی گرداند
SELECT ROUND(1234000.3254, -2) FROM DUAL 1234000 را برمی گرداند،
SELECT ROUND(-100.122، 2) FROM DUAL -100.12 برمی گردد.

6) تابع برش مقدار TRUNC (شماره_1، شماره_2). مقدار پارامتر اول کوتاه شده را به تعداد ارقام اعشاری مشخص شده در پارامتر دوم برمی گرداند. مثال ها
SELECT TRUNC(150.58) FROM DUAL مقدار 150 را برمی گرداند
SELECT TRUNC(235.4587, 2) FROM DUAL 235.45 را برمی گرداند
SELECT TRUNC(101.23, -1) FROM DUAL مقدار 100 را برمی گرداند.

7) Oracle DBMS دارای تعدادی توابع مثلثاتی SIN(عدد)، COS(عدد)، TAN(عدد) و معکوس آنها ACOS(عدد)، ASIN(عدد)، ATAN(عدد) است. آنها مقدار تابع مثلثاتی مربوط به نام را برمی گردانند. برای توابع مستقیم، پارامتر مقدار زاویه بر حسب رادیان و برای توابع معکوس، مقدار تابع است. مثال ها
SELECT COS(0.5) FROM DUAL مقدار 0.877582561890373 را برمی گرداند.
SELECT SIN(0.5) FROM DUAL مقدار 0.479425538604203 را برمی گرداند.
SELECT TAN(0.5) FROM DUAL مقدار 0.546302489843791 را برمی گرداند.
SELECT ACOS(0.5) FROM DUAL مقدار 1.0471975511966 را برمی گرداند.
SELECT ASIN(0.5) FROM DUAL 0.523598775598299 را برمی گرداند.
SELECT ATAN(0.5) FROM DUAL مقدار 0.463647609000806 را برمی گرداند.

8) توابع هذلولی. SINH (شماره)،
COSH (تعداد)، TANH (تعداد). SINH() سینوس هذلولی پارامتر تصویب شده، COSH() کسینوس هذلولی پارامتر تصویب شده، TANH() مماس هذلولی پارامتر ارسال شده را برمی گرداند. مثال ها
SELECT COSH(0.5) FROM DUAL مقدار 1.12762596520638 را برمی گرداند.
SELECT SINH(0.5) FROM DUAL مقدار 0.521095305493747 SELECT TANH(0.5) FROM DUAL مقدار 0.46211715726001 را برمی گرداند.

9) تابع توان POWER (شماره_1، عدد_2). مثال ها
SELECT POWER(10, 2) FROM DUAL 100 را برمی گرداند
SELECT POWER(100, -2) FROM DUAL مقدار 0.0001 را برمی گرداند.

10) توابع لگاریتمی. LN(number) لگاریتم طبیعی پارامتر تصویب شده را برمی گرداند، LOG(number_1, number_2) لگاریتم دومین پارامتر ارسال شده را به پایه داده شده به پارامتر اول برمی گرداند. علاوه بر این، پارامتر اول باید بزرگتر از صفر باشد و برابر با 1 نباشد. مثالها
SELECT LN(5) FROM DUAL مقدار 1.6094379124341 را برمی گرداند.
SELECT LOG(10, 3) FROM DUAL مقدار 0.477121254719662 را برمی گرداند.

11) تابع استخراج ریشه دوم SQRT (شماره). مثال
SELECT SQRT(4) FROM DUAL مقدار 2 را برمی گرداند.

12) تابع افزایش عدد e به توان EXP (عدد). مثال
SELECT EXP(2) FROM DUAL 7.38905609893065 را برمی گرداند.

توابع تاریخ در اوراکل

در عمل، اغلب لازم است که داده ها را در قالب تاریخ تجزیه و تحلیل کنید، برخی از عملیات را روی آنها انجام دهید، قالب را تغییر دهید. همه این عملیات قبلاً به عنوان توابع داخلی اجرا شده اند. بیایید اساسی ترین آنها را در نظر بگیریم.

1) ADD_MONTHS(date, number_of_months) تاریخی را برمی گرداند که از تاریخ گذرانده شده در پارامتر اول با تعداد ماه های مشخص شده در پارامتر دوم جدا شده است. مثال ها
SELECT ADD_MONTHS('01-JAN-2010', 2) FROM DUAL تاریخ '03/01/2010' را برمی گرداند
SELECT ADD_MONTHS('01-JAN-2010', -3) FROM DUAL تاریخ '10/01/2009' را برمی گرداند
SELECT ADD_MONTHS('30-JAN-2010', 1) FROM DUAL تاریخ '28.02.2010' را برمی گرداند

2) برای تعیین تاریخ فعلیو زمان، تابع SYSDATE استفاده می شود. دامنه این عملکرد بسیار گسترده تر از آن چیزی است که در نگاه اول به نظر می رسد. اول از همه، کنترل بر ورود داده ها به پایگاه داده است. در بسیاری از جداول، یک فیلد جداگانه برای ذخیره تاریخ آخرین اصلاح اختصاص داده شده است. همچنین کنترل برخی پارامترهای ورودی برای گزارش ها بسیار راحت است، به خصوص اگر آنها نباید بزرگتر از تاریخ فعلی باشند. این تابع علاوه بر تاریخ، زمان را نیز به نزدیکترین ثانیه برمی گرداند. مثال
SELECT SYSDATE FROM DUAL تاریخ را برمی گرداند '22.05.2010 14:51:20'

3) اگر باید آخرین روز ماه را تعیین کنید، تابع LAST_DAY (تاریخ) برای این کار کاملاً مناسب است. می توان از آن برای تعیین تعداد روزهای باقی مانده در یک ماه استفاده کرد.
LAST_DAY (SYSDATE) را انتخاب کنید - SYSDATE FROM DUAL.
در نتیجه اجرای این دستور تعداد روزهای از تاریخ جاری تا پایان ماه نمایش داده می شود. مثال
SELECT LAST_DAY('15-FEB-2010') FROM DUAL تاریخ '28.02.2010' را برمی گرداند.

4) تابعی برای تعیین تعداد ماه‌های بین تاریخ‌های MONTHS_BETWEEN (تاریخ_1، تاریخ_2). مثال ها
SELECT MONTHS_BETWEEN('01-JUL-2009', '01-JAN-2010') FROM DUAL -6 برمی گردد
SELECT MONTHS_BETWEEN('01-JUL-2009', '10-JAN-2010') FROM DUAL -6.29032258064516 برمی گردد.
توجه داشته باشید. اگر روزهای ماه ها یکسان باشد، تابع یک عدد صحیح برمی گرداند، در غیر این صورت نتیجه یک کسری و تعداد روزهای ماه 31 خواهد بود.

5) تابع NEXT_DAY (تاریخ، روز هفته) به شما امکان می دهد تاریخ بعدی را از تاریخ عبور در پارامتر اول تعیین کنید، که مطابق با روز هفته سپری شده در پارامتر دوم است. مثال
SELECT NEXT_DAY('01-JUL-2009', 'mon') FROM DUAL تاریخ '07/06/2009' را برمی گرداند، یعنی دوشنبه بعدی پس از 1 ژوئیه 2009، ششم است.

6) گرد کردن تاریخ ROUND (تاریخ، قالب). پارامتر دوم اختیاری است، اگر مشخص نشده باشد، به عنوان "DD" گرفته می شود، یعنی گرد کردن به نزدیکترین روز انجام می شود. مثال ها
SELECT ROUND(SYSDATE) FROM DUAL تاریخ "5/23/2010" را برمی گرداند
SELECT ROUND(SYSDATE, MONTH) FROM DUAL تاریخ '06/01/2010' را برمی گرداند که به نزدیکترین روز اول ماه گرد شده است.

7) قطع تاریخ. تابع TRUNC (تاریخ، قالب). همانطور که در بالا توضیح داده شد، ممکن است پارامتر دوم نداشته باشد. در این صورت برش تا روز بعد انجام می شود. مثال ها
SELECT TRUNC(SYSDATE) FROM DUAL تاریخ "5/22/2010" را برمی گرداند
SELECT TRUNC(SYSDATE، 'WW') FROM DUAL تاریخ '5/1/2010' را برمی گرداند
SELECT TRUNC(SYSDATE، 'Day') FROM DUAL تاریخ '5/16/2010' را برمی گرداند.

توابع تبدیل داده در اوراکل

این بخش به بررسی تبدیل داده ها به فرمت های مختلف. در عمل، زمانی که لازم است مقادیر رشته ها را به عنوان اعداد در نظر بگیریم، موقعیت ها بسیار رایج هستند و بالعکس. با وجود تعداد کمی از توابع، قابلیت های آنها برای حل مسائل بسیار پیچیده کاربردی کاملاً کافی است.

1) TO_CHAR (داده ها، قالب). در نگاه اول، نحو بسیار ساده است، اما با توجه به پارامتر دوم، شما می توانید با دقت بسیار دقیق توضیح دهید که داده ها را به چه فرمتی تبدیل کنید. بنابراین، هم تاریخ و هم مقدار عددی را می توان به رشته تبدیل کرد. گزینه تبدیل تاریخ به رشته را در نظر بگیرید. مقادیر رایج ترین فرمت ها در جدول نشان داده شده است اطلاعات کاملموجود در اسناد فنی

جدول مقادیر قالب برای تبدیل عدد به رشته.

SELECT TO_CHAR (SYSDATE، 'D-MONTH-YY') FROM DUAL رشته '7-MAY -10' را برمی گرداند.
SELECT TO_CHAR(SYSDATE، 'DDD-MM-YYYY') FROM DUAL رشته '142-05-2010' را برمی گرداند.
SELECT TO_CHAR(SYSDATE، 'Q-D-MM-YYY') FROM DUAL رشته '2-7-05-010' را برمی گرداند.
SELECT TO_CHAR(1050, '9.99EEEE) FROM DUAL رشته ' 1.050E+03' را برمی گرداند
SELECT TO_CHAR(1400, '9999V999') FROM DUAL رشته '1400000' را برمی گرداند.
SELECT TO_CHAR(48، 'RM') FROM DUAL رشته 'XLVIII' را برمی گرداند.

2) تابع تبدیل یک رشته به تاریخ TO_DATE (رشته، قالب). مقادیر قالب ممکن قبلاً در بالا مورد بحث قرار گرفته است، بنابراین من چند نمونه از استفاده از این تابع را ارائه خواهم کرد. مثال ها
SELECT TO_DATE('01/01/2010', 'DD.MM.YYYY') FROM DUAL تاریخ '01/01/2010' را برمی گرداند
SELECT TO_DATE('01.JAN.2010', 'DD.MON.YYYY') FROM DUAL تاریخ '01.01.2009' را برمی گرداند
SELECT TO_DATE('15-01-10', 'DD-MM-YY') FROM DUAL تاریخ '1/15/2010' را برمی گرداند.

3) تابع تبدیل رشته به مقدار عددی TO_NUMBER (رشته، قالب). رایج ترین مقادیر قالب در جدول ذکر شده است، بنابراین بیایید استفاده از این تابع را با استفاده از مثال ها در نظر بگیریم. مثال ها
SELECT TO_NUMBER('100') FROM DUAL عدد 100 را برمی گرداند
SELECT TO_NUMBER('0010.01', '9999D99') FROM DUAL عدد 10.01 را برمی گرداند.
SELECT TO_NUMBER("500000","999G999") FROM DUAL عدد 500000 را برمی گرداند.

S. Moiseenko

با دو رقم اعشار، مقدار میانگین تفنگ ها را برای کلاس های کشتی جنگی تعیین کنید.

من فکر می کنم فقط یک مشکل در این کار وجود دارد و آن گرد کردن است. اما اخیراً راه حل زیر را دریافت کردم:

SUM(sum_g)/SUM(count_g) FROM را انتخاب کنید
(انتخاب SUM(numGuns) AS sum_g , COUNT(*) AS count_g
FROM Classes INNER Join Ships ON Classes.class = Ships.class
WHERE type="bb"
اتحاد. اتصال
SELECT SUM(numGuns) AS sum_g , COUNT(*) AS count_g
FROM Classes JOIN داخلی نتایج در Classes.class = Outcomes.ship
WHERE type="bb") AS a

برای تجزیه و تحلیل اشتباهات بسیار غنی است. بیایید از گرد کردن شروع کنیم. تعداد اسلحه ها یک عدد صحیح است (با توجه به نوع ستون، نه منطق!). به همین دلیل است که خود مجموع یک عدد کامل خواهد بود. هنگام تقسیم اعداد صحیح در SQL Server همیشه یک عدد صحیح می گیریم. و نتیجه نه با گرد کردن بلکه با DISCARDING قسمت کسری به دست می آید. برای مثال، کوئری زیر را اجرا کنید:

نتیجه 0 خواهد بود و آنچه را که ما گفتیم تایید می کند. بنابراین، برای ایجاد بهبودهای زیبایی در این پرس و جو، حداقل یک عملوند باید به نوع واقعی تبدیل شود. همانطور که در راهنما در www.sql-ex نوشته ام. سایت .ru، می توانید از تبدیل نوع ضمنی استفاده کنید:

SELECT SUM(sum_g)*1.0/SUM(count_g)

یعنی وقتی در یک واحد واقعی ضرب می‌شود، صورت‌گر خودش به یک عدد حقیقی تبدیل می‌شود.

اکنون، از آنجایی که باید میانگین را بر اساس طبقات بشماریم، ابتدا نباید کشتی‌ها را در نظر بگیریم و ثانیاً، نیازی نیست کشتی‌ها را از جدول Outcomes به خاطر بسپاریم.

اما برای تجزیه و تحلیل اشتباهات، اجازه دهید "راه حل را در تفسیر نویسنده آن در نظر بگیریم، یعنی، ما مقدار متوسط ​​را توسط تمام کشتی های خطی از پایگاه داده تعریف می کنیم، و معلوم می شود که این کار 54 است. من در مورد آن بحث کرده ام. وظیفه اما با یک اشتباه دیگر

بنابراین، تعداد اسلحه ها و مقدار به طور جداگانه توسط کشتی ها از جدول کشتی ها و توسط کشتی های سرنشین از جدول نتایج محاسبه می شود. سپس، در پرس و جو اصلی، تعداد اسلحه ها را خلاصه می کنیم وتعداد کشتی ها بر اساس هر جدول و برای بدست آوردن مقدار متوسط، اولی را بر ثانیه تقسیم کنید.

اجازه دهید یک مثال را مورد بحث قرار دهیم. بگذارید 2 کشتی با 11 و 8 اسلحه در جدول کشتی ها و 1 کشتی با 11 اسلحه در جدول نتایج وجود داشته باشد. بنابراین ما 3 کشتی با 30 اسلحه دریافت می کنیم. مقدار متوسط ​​30/3 = است. 10. آیا این درست است؟ خیر، یعنی فقط برای موارد خاص درست است، در حالی که ما باید یک کوئری بنویسیم که برای هر داده ای درست باشد. من چندین مثال برای اثبات این موضوع می بینم.

اولین. اگر هیچ سرنشینی وجود نداشته باشد که با شرایط کار در جدول نتایج مطابقت داشته باشد؟ سپس درخواست دوم باز خواهد گشت: 0 کشتی، تعداد اسلحه ها NULL است. در نتیجه محاسبه میانگین بدست می آوریم

(19 + NULL)/(2+0) = NULL

دومین.اجازه دهید کشتی سر کلاس «bb» هم در جدول کشتی‌ها و هم در جدول نتایج باشد، یعنی همان کشتی است. سپس ما باید 19/2 را دریافت کنیم اما 30/3 را همانطور که راه حل ارائه می دهد نه.

سوم. اما اگر در وضعیت قبلی کشتی ها، کشتی اصلی دو بار در نبردها شرکت می کرد، چه؟ سپس به جای 19/2 خود، (19 + 22) / (2 + 2) را دریافت می کنیم.

چهارم...خودت بهش فکر کن به این ترتیب است که پایگاه بررسی در سایت J .

» مثال‌های ارائه شده در اینجا را می‌توان مستقیماً در وب‌سایت با انتخاب کادر «بدون علامت زدن» انجام داد. صفحهبا تمرینات SELECT

برترین مقالات مرتبط