% ในอนุประโยคนี้ทำอะไรได้บ้าง


13

ฉันกำลังฝึกอบรมและสคริปต์ตัวใดตัวหนึ่งมีคำสั่งต่อไปนี้:

SELECT SUM(Col2) FROM clust_table WHERE Col1 % 3 = 1

ฉันต้องการทราบว่าตัวอย่างข้อมูลนี้มีไว้ในส่วนคำสั่ง WHERE: Col1 % 3 = 1

ฉันทำการวิจัยบนอินเทอร์เน็ตและไม่พบการอ้างอิงเกี่ยวกับคำสั่งนี้

คำตอบ:


32

มันถูกใช้เป็นตัวดำเนินการ Modulo ส่งคืนเศษที่เหลือของตัวเลขหารด้วยอีกอัน

ในตัวอย่างของคุณ WHERE clause จะ จำกัด ผลลัพธ์เฉพาะที่ที่ค่า Col1 หารด้วย 3 จะเหลือ 1 เท่ากับ (เช่น 4,7,10 เป็นต้น)



6

% ใน SQL สามารถใช้ได้ในสองรูปแบบที่แตกต่างกัน ถ้ามันถูกใช้ในสตริงด้วยLIKEมันเป็นไวด์การ์ดตัวอย่างเช่น:

WHERE col_name like '%test%'

นั่นหมายถึงพบทุกสิ่งcol_nameที่มีคำว่า "ทดสอบ" อยู่ในนั้น

แต่ในการดำเนินการเฉพาะนี้จะมีการใช้สัญลักษณ์% เป็นตัวดำเนินการโมดูโล Modulo (บนเครื่องคิดเลขโดยปกติจะแสดงเป็นMODปุ่ม) จะคืนค่าส่วนที่เหลือ มันอาจเป็นเครื่องมือที่มีประโยชน์มากหากใช้สำหรับ for loop เพื่อแสดงข้อมูลและคุณต้องการนับคอลัมน์ - ฉันเพิ่งใช้ตัวดำเนินการ modulo เมื่อวาดหน้าเว็บขึ้นมา Mine อยู่ใน PHP แต่นี่เป็นตัวอย่าง:

$count = 0 ;
$records = array () ;
for ( $a = 0 ; $a < 100 ; $a++ )
    $records[$a] = $a ;
foreach ( $records as $record )
{
    if ( $count % 3 == 0 )
        echo '<p>Three items</p>' ;
    if ( $count % 10 == 0 )
        echo '<p>Ten items</p>' ;
    echo '<p>'.$record.'</p>' ;
    $count++ ;
}

โดยทั่วไปแล้วจะส่งออก 1 - 100 และทุกสามรายการมันจะส่งออก "สามรายการ" และทุกสิบรายการมันจะส่งออก "สิบรายการ" เพราะตัวเลขอื่น ๆ จะส่งกลับค่าเช่น:

5 / 10 = 0.5 (5 % 10 = 5)
2 / 3 = 0.666... (2 % 3 = 2)
50 / 10 = 5.0 (50 % 10 = 0)
9 / 3 = 3.0 (9 % 3 = 0)

2
2% 3 = 2 ไม่ใช่ 6 .. modulo ส่งคืนเศษที่เหลือเมื่อจำนวนที่คุณหารด้วยมีขนาดใหญ่กว่าจำนวนที่คุณหาร ทศนิยมต่อท้ายของการหารด้วยทศนิยมไม่มีผลต่อการออก mod
Nick Dewitt

และselect 5 / 10 ;จะให้0ใน SQL ไม่ใช่0.5
ypercubeᵀᴹ

2

คำตอบอื่น ๆ นั้นถูกต้อง มันคือโอเปอเรเตอร์ของโมดูโล่ที่คืนค่าส่วนที่เหลือ

  • 0% 3 = 0
  • 1% 3 = 1
  • 2% 3 = 2
  • 3% 3 = 0
  • 4% 3 = 1
  • 5% 3 = 2
  • ...

แต่ฉันคิดว่ามันอาจจะมีประโยชน์ในการเพิ่มเพราะมันเป็นการดำเนินการที่เกี่ยวข้องและทำไมบางครั้งมันอาจมีประโยชน์

X % 2เป็นที่ใช้มากที่สุดเพราะมันจะกลับถ้าจำนวนเป็นคู่หรือคี่

ลองนึกภาพว่าคุณต้องการเลือกคอลัมน์ทั้งหมดที่มีตัวเลขสม่ำเสมอคุณสามารถทำได้:

SELECT * FROM table WHERE column % 2 = 0

หากคุณต้องการเลือกคอลัมน์ทั้งหมดที่มีตัวเลขคี่คุณสามารถทำได้:

SELECT * FROM table WHERE column % 2 = 1

กรณีการใช้งานอื่น ๆ สามารถเกิดขึ้นได้ตัวอย่างเช่นคุณต้องการกรองคอลัมน์ทั้งหมดตามหน่วยของพวกเขาคุณสามารถใช้สิ่งนี้เพื่อรับตัวเลขทั้งหมดที่มีศูนย์ในหน่วยของพวกเขา:

SELECT * FROM table WHERE column % 10 = 0
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.